見出し画像

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-865001)」を指定
        .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/

https://kabonote.com/excel-vba/readcsvbyadorecordset/
;CSVファイル名の指定。[]で括る。
[厄介なCSV.csv]

;区切り文字の指定
;CSVDelimited:カンマ区切り
;TabDelimited:タブ区切り
Format=CSVDelimited

;ファイルの文字コードの指定
;UTF-865001
;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と同じフォルダ内です。

https://kabonote.com/excel-vba/readcsvbyadorecordset/


この記事が気に入ったらサポートをしてみませんか?