【ExcelVBA】CSVファイルを読み込む方法とは?高速化方法も徹底解説!

こんにちは、フリーランスエンジニア兼ライターのワキザカ サンシロウです。

皆さんは、VBAでCSVファイルを読み込む方法について知っていますか?外部データをCSVファイルから読み込んで使うケースは、よくありますよね。

そこで今回は、

  • CSVファイルを読み込む方法とは
  • Openメソッドを使ったCSVファイル読み込み方法
  • QueryTablesメソッドを使ったCSVファイル読み込み方法
  • CSVファイルを高速に読み込む方法
  • といった基礎的なことから、応用的な方法まで、徹底的に解説します!

    目次

    CSVファイルを読み込む2つの方法とは

    はじめに、CSVファイルを読み込む方法について解説します。

    CSVファイルを読み込む方法は、大きくわけて2つの方法があります。

    • Openメソッド
    • QueryTableメソッド


    それぞれ詳しく解説しますね。

    Openメソッドを使う方法

    まずは、Openメソッドを使う方法について解説します。

    Openメソッドの使い方は次のとおりです。

    読み込むCSVファイルデータ:

    No,Name
    1,侍エンジニア1
    2,侍エンジニア2
    3,侍エンジニア3

    Openメソッドを使ったサンプルコード:

    Sub Test()
        Dim n As Integer, i As Integer
        Dim str1 As String, str2 As String, str3 As String
        
        n = 1
        Open ThisWorkbook.Path & "test1.csv" For Input As #n
        
        Do While Not EOF(n)
            i = i + 1
            Input #n, str1, str2
            Cells(i, 1).Value = str1
            Cells(i, 2).Value = str2
        Loop
        
        Close #n
    End Sub

    実行結果:

    Openメソッドでファイルパスを指定してCSVファイルを開き、「Do While Not EOF(n) ~ Loop」でデータの行数分読み込み処理をしています。

    処理の中では、「Input #n, str1, str2」のように実際に取得するデータの列数分「Input #n」以降でカンマ区切りで変数を指定することで値を取得し、「Cells(i, 1).Value = str1」のように取得した値をセルに書き込むサンプルです。

    このように、取得したデータを1行ずつ読み込んで処理するのがOpenメソッドの特徴です。

    Openメソッドの詳しい使い方については以下で詳しく解説しているので、気になる方は見てみてくださいね!

    QueryTablesメソッドを使う方法

    次に、QueryTablesメソッドを使う方法について解説します。

    QueryTablesメソッドの使い方は次のとおりです。

    読み込むCSVファイルデータ:

    No,Name
    1,侍エンジニア1
    2,侍エンジニア2
    3,侍エンジニア3

    QueryTablesメソッドを使ったサンプルコード:

    Sub Test()
      Dim wsImport As Worksheet
      Set wsImport = Worksheets("CSV読み込み") 'CSVデータを取り込み用シート
      
      '読み込むファイル
      Dim strFilePath As String
      strFilePath = ThisWorkbook.Path & “test1.csv"
        
      Dim queryTb As QueryTable
      Set queryTb = wsImport.QueryTables.Add(Connection:="TEXT;" & strFilePath, _
                                             Destination:=wsImport.Range("A1")) ' CSV を開く
      With queryTb
          .TextFilePlatform = 932          ' 文字コードを指定
          .TextFileParseType = xlDelimited ' 区切り文字の形式
          .TextFileCommaDelimiter = True   ' カンマ区切り
          .RefreshStyle = xlOverwriteCells ' セルに書き込む方式
          .Refresh                         ' データを表示
          .Delete                          ' CSVファイルとの接続を解除
      End With
    End Sub

    実行結果:

    「wsImport.QueryTables.Add(Connection:=”TEXT;” & strFilePath, Destination:=wsImport.Range(“A1”))」の処理のConnectionでCSVファイルを指定し、DestinationでCSVファイルを読み込んだデータを書き込む位置を指定しています。

    その後、「With queryTb ~ End With」の処理で読み込み形式を指定してデータをインポートしています。

    このように、簡単に指定したファイルのデータをインポートすることができます。

    また、今回はCSVファイルだったので「TextFileCommaDelimiter = True」でカンマ区切りを指定していましたが、「TextFileTabDelimiter = True」を指定すればタブ区切りのファイルもインポートすることができます。

    QueryTablesメソッドの詳しい使い方については以下で詳しく解説しているので、気になる方は見てみてくださいね!

    Openメソッド・QueryTablesメソッドどちらがいいの?

    ここまで読んだ方は、次のような疑問を持っているのではないでしょうか。

    OpenメソッドとQueryTablesメソッドどっちを使えばいいんだろう・・・

    正直言うと、どちらもCSVファイルを読み込むことができるので、データの量が少ない時はどちらでも構いません。

    ただ、Openメソッドは1行ずつデータを読み込むため大量のデータを読み込むときは速度が遅くなってしまいます。そのため、QueryTablesメソッドを使うのがおすすめです! ちなみに、処理速度はTimer関数を使えば簡単に確認することができます。

    速度確認方法:

    Dim startTime As Double
    Dim endTime As Double
    Dim processTime As Double
      
    '開始時間取得
    startTime = Timer
      
      
    'メイン処理
      
      
    '終了時間取得
    endTime = Timer
     
    '処理時間計算
    processTime = endTime - startTime
    

    開始時にstartTime、終了時にendTimeに時刻を入れて、「endTime – startTime」をすることで処理時間を確認するサンプルです。

    このように、簡単に処理時間を計測することができます。

    Timer関数の詳しい使い方については以下で詳しく解説しているので、気になる方は見てみてくださいね!

    まとめ

    今回は、CSVファイルを読み込む方法について解説しました。

    外部データを取り込んでExcelで使うケースはよくあります。使い方も簡単なので、ぜひ使ってみてくださいね!

    この記事を書いた人

    【プロフィール】
    DX認定取得事業者に選定されている株式会社SAMURAIのマーケティング・コミュニケーション部が運営。「質の高いIT教育を、すべての人に」をミッションに、IT・プログラミングを学び始めた初学者の方に向け記事を執筆。
    累計指導者数4万5,000名以上のプログラミングスクール「侍エンジニア」、累計登録者数1万8,000人以上のオンライン学習サービス「侍テラコヤ」で扱う教材開発のノウハウ、2013年の創業から運営で得た知見に基づき、記事の執筆だけでなく編集・監修も担当しています。
    【専門分野】
    IT/Web開発/AI・ロボット開発/インフラ開発/ゲーム開発/AI/Webデザイン

    目次