![見出し画像](https://assets.st-note.com/production/uploads/images/137712668/rectangle_large_type_2_fe09476d6bea987a8968597fd969af33.png?width=1200)
memo csv取り込み 引用
Sub Test()
Const CSV_FILE_PATH As String = "C:\00_myenv\10_macro\01_test\厄介なCSV.csv"
Call ReadCsv_QueryTables(CSV_FILE_PATH, ThisWorkbook.Worksheets("QueryTables"))
End Sub
Sub ReadCsv_QueryTables(ByVal csvFilePath As String, ByRef outputWs As Worksheet)
With outputWs.QueryTables.Add(Connection:="Text;" & csvFilePath, Destination:=outputWs.Range("A1"))
.AdjustColumnWidth = False
.TextFileColumnDataTypes = Array(2, 2, 2, 2, 2, 2, 2) '各カラムの型に「文字列(2)」を指定
.TextFilePlatform = 65001 '文字コードに「UTF-8(65001)」を指定
.TextFileCommaDelimiter = True
.RefreshStyle = xlOverwriteCells
.Refresh BackgroundQuery:=False
.Delete
End With
End Sub
Sub Test()
Const CSV_FILE_PATH As String = "C:\00_myenv\10_macro\01_test\厄介なCSV.csv"
Call ReadCSV_ADODBRecordset(CSV_FILE_PATH, ThisWorkbook.Worksheets("ADORecordset"))
End Sub
Sub ReadCSV_ADODBRecordset(ByVal csvFilePath As String, ByRef outputWs As Worksheet)
'CSVのファイル名を取得
Dim csvFileName As String
csvFileName = CreateObject("Scripting.FileSystemObject").GetFileName(csvFilePath)
'CSVのフォルダパスを取得
Dim csvFolderPath As String
csvFolderPath = CreateObject("Scripting.FileSystemObject").GetParentFolderName(csvFilePath)
'SQL文の準備
'FROM句は、CSVのファイル名を"[]"で括る
Dim sql As String
sql = ""
sql = sql & "SELECT * "
sql = sql & "FROM [" & csvFileName & "]"
'CSVへのConnectionを生成
Dim adoCon As Object
Set adoCon = CreateObject("ADODB.Connection")
With adoCon
.Provider = "Microsoft.ACE.OLEDB.12.0"
.Properties("Extended Properties").Value = "Text"
.Properties("Data Source").Value = csvFolderPath 'CSVのフォルダパスを指定
.Open
End With
'Recordsetを生成し、SQLを実行
Dim adoRs As Object
Set adoRs = CreateObject("ADODB.Recordset")
adoRs.Open sql, adoCon
'ヘッダー部の出力
Dim i As Long: i = 1
Dim field As Variant
For Each field In adoRs.Fields
outputWs.Cells(1, i) = field.Name
i = i + 1
Next field
'データ部の出力
outputWs.Range("A2").CopyFromRecordset adoRs
outputWs.Range("A1").CurrentRegion.NumberFormat = "@" 'セルの書式を「文字列」に設定
adoCon.Close
Set adoRs = Nothing
Set adoCon = Nothing
End Sub
https://kabonote.com/excel-vba/readcsvbyadorecordset/
;CSVファイル名の指定。[]で括る。
[厄介なCSV.csv]
;区切り文字の指定
;CSVDelimited:カンマ区切り
;TabDelimited:タブ区切り
Format=CSVDelimited
;ファイルの文字コードの指定
;UTF-8:65001
;SJIS:932
;EUCJP:51932
CharacterSet=65001
;CSVのヘッダー部有無の指定
ColNameHeader=True
;以降、CSVのカラム名と読み込み時のデータ型を指定
;今回は全てテキストとする
Col1=No Text
Col2=商品コード Text
Col3=識別コード Text
Col4=商品名 Text
Col5=発売日 Text
Col6=価格 Text
Col7=備考 Text
ファイルの文字コードは「SJIS」にしてください。他の文字コードだと、
うまく読み込めなくなります。
ファイル名は「schema.ini」固定です。マクロ実行時にこのファイル名のファイルが自動で読み込まれます。ファイル名が違うと読み込まれません。
以下のように、配置する場所は、CSVと同じフォルダ内です。
この記事が気に入ったらサポートをしてみませんか?