サクッとコピペ ExcelVBA

サクッとコピペして、使えるVBAコード集

任意のフォルダからCSVを選択し、シートに読み込むマクロ(QueryTablesメソッド)

CSVExcelシートに読み込む方法

CSVファイルをExcelのシートに読み込むのをVBAで行う際の方法としては、次の3つがあります。

  1. QueryTablesメソッドを使う(Worksheetsオブジェクト)
  2. Openステートメントを使う(参照
  3. ADO(ActiveX Data Objects)を利用する(参照

それぞれに利点などがあるのですが、「先頭0が消える」とか「Shift-Jis とUTF-8の形式相違」問題などを考えると、列のデータ形式の設定やCSVの形式がコード上管理しやすいので「1. QueryTablesメソッドを使う(Worksheetsオブジェクト)」が、私にはしっくりきました。この方法は、マクロの記録機能を使って、テキストデータをExcelシートに手動で読み込む際に記録されるものと一致します(現在はレガシから選択)。

それでは、具体的なコードを見てみましょう。

Sub Querytablesメソッドで取得()
    
    Application.ScreenUpdating = False  '画面遷移を停止
            
    'カレントディレクトリの指定(任意設定)
    ChDir "C:\Users\yamadataro\Desktop\マクロ"
    
    '取り込み元ファイルパスの取得
    Dim filePath As String
    filePath = Application.GetOpenFilename
    
    '読み込みシートのクリア
    ThisWorkbook.Sheets("sheet1").Cells.ClearContents
    
    'このワークブックの読み込みシートのオブジェクト取り込み
    Dim ws As Worksheet
    Set ws = Worksheets("Sheet1")
    
    'クエリテーブルを作る
    Dim queryTb As queryTable
    Set queryTb = ws.QueryTables.Add(Connection:="TEXT;" & filePath, _
                                         Destination:=ws.Range("A1"))
    
    '列のデータタイプ(配列)の作成(先頭の「0」落ち防止等)
    'ここでは、全部文字列にしています。省略可能
    Dim arrDataType() As Integer
    Dim i As Long
    ReDim arrDataType(255) '※Excel2003の最大列数としました。
    For i = 0 To 255
        arrDataType(i) = XlColumnDataType.xlTextFormat
    Next
    'クエリテーブルの定義
    With queryTb
        .TextFilePlatform = 65001     'ShiftJis「932」UTF-8「65001」
        .TextFileParseType = xlDelimited    '区切り文字の指定
        .TextFileCommaDelimiter = True      'カンマ区切り
        .TextFileTabDelimiter = False       'タブ区切り
        .TextFileSemicolonDelimiter = False 'セミコロン区切り
        .TextFileSpaceDelimiter = False     'スペース区切り
        '列ごとのデータタイプを指定(配列)
        .TextFileColumnDataTypes = arrDataType
        .RefreshStyle = xlOverwriteCells    'セルに上書き
        .Refresh                            'データを表示
        .Delete                             'CSVファイルと接続を遮断
    
    End With
    
    Set ws = Nothing
    Set queryTb = Nothing
    
    Application.ScreenUpdating = True  '画面遷移を戻す
End Sub

QueryTablesメソッドについて

QueryTablesメソッドなんですが、コードにおける.add以下の部分がポイントです。「Connection:」以下で、ファイルのパスを指定しているのですが、「"TEXT;"」でテキスト形式のファイルとして、パスのファイルと接続し、このシートのセル(A1)にテーブルを張り付けたことを意味しています。その後は、その読み込んだQueryTableのプロパティをいじって、整形しています。

主要なプロパティの説明

プロパティ名 定数の説明
TextFilePlatform ShiftJisなら、「932」UTF-8なら、「65001」
TextFileParseType 区切り文字なら、「xlDelimited」、固定長なら「xlFixedWidth」
TextFileCommaDelimiter カンマ区切り 「TRUE」 または 「FALSE」
TextFileTabDelimiter タブ区切り 「TRUE」 または 「FALSE」
TextFileSemicolonDelimiter セミコロン区切り 「TRUE」 または 「FALSE」
TextFileSpaceDelimiter スペース区切り 「TRUE」 または 「FALSE」
TextFileColumnDataTypes

列のデータ形式 配列で指定(例:Array(1,1,2,3)) 

<配列の要素>

標準:1(xlGeneralFormat)、文字列:2(xlTextFormat)

日付(YMD):5(xlYMDFormat)など

 

プライバシーポリシーはこちら