CSV取り込み

コード



Sub CSV取り込み()

Dim tgtCsv As String
tgtCsv = ファイル選択()
If tgtCsv = "" Then Exit Sub

Dim ws As Worksheet
Set ws = ActiveSheet ' CSV のデータを取り込むシート

Dim qt As QueryTable
Set qt = ws.QueryTables.Add(Connection:="TEXT;" & tgtCsv, Destination:=ws.Range("A1"))  ' CSV を開く
With qt
    .TextFilePlatform = 932          ' 文字コードを指定(shift-jis:932, utf-8:65001)
    .TextFileParseType = xlDelimited ' 区切り文字の形式
    .TextFileCommaDelimiter = True   ' カンマ区切り
'    .TextFileTabDelimiter = True       ' タブ区切り
'    .TextFileSemicolonDelimiter = True ' セミコロン区切り
'    .TextFileSpaceDelimiter = True     ' スペース区切り
'    .TextFileOtherDelimiter = "_"      ' 任意区切り
    .RefreshStyle = xlOverwriteCells    ' セルに上書き
    .AdjustColumnWidth = False                          ' 列幅を自動調整しない
'    .TextFileTextQualifier = xlTextQualifierDoubleQuote ' 引用符の指定(xlTextQualifierNone:引用符なし,xlTextQualifierSingleQuote:シングルクォーテーション)
    .TextFileStartRow = 1               ' 1 行目から読み込み
    .TextFileColumnDataTypes = Array(2, 1, 9, 9, 9, 9) '1:標準, 2:文字列, 9:スキップ
    .Refresh                            ' データを表示
    .Delete                             ' CSV との接続を解除
End With

End Sub

Function ファイル選択()
    With Application.FileDialog(msoFileDialogFilePicker)
        .InitialFileName = ThisWorkbook.Path & "\"
        .AllowMultiSelect = False
        .Title = "ファイルの選択"
        If .Show = True Then
            ファイル選択 = .SelectedItems(1)
        Else
            MsgBox "選択されていません"
        End If
    End With
End Function

解説

ファイルダイアログを開き、CSVファイルを選択すると取り込める。
区切り文字、データタイプは、取り込むCSVの種類によって設定を変える必要がある。データタイプは、列数(区切り)が多いCSVの場合はマクロ記録を使用して転記してもよい。

参考サイト

Tipsfound