【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メソッドの詳しい使い方については以下で詳しく解説しているので、気になる方は見てみてくださいね!

    【VBA入門】OpenメソッドでテキストファイルやCSVの読み込み
    更新日 : 2019年5月26日

    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メソッドの詳しい使い方については以下で詳しく解説しているので、気になる方は見てみてくださいね!

    【ExcelVBA入門】QueryTablesメソッドで高速にファイルを読み込む方法
    更新日 : 2019年5月23日

    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関数の詳しい使い方については以下で詳しく解説しているので、気になる方は見てみてくださいね!

    【ExcelVBA入門】処理時間を計測するためのTimer関数の使い方とは
    更新日 : 2019年5月3日

    まとめ

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

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

    LINEで送る
    Pocket

    SEからWebエンジニアへ転職した理由

    侍エンジニア塾卒業生の小池さんは、以前は社内SEとして約5年ほど勤務していました。しかし業務内容は社内のヘルプデスク対応など、プログラムを書く仕事は全くなかったそうです。

    SEながらプログラムを書けない現状に「将来仕事がなくなるんじゃないか」と不安を感じ、プログラミング学習を決意。

    弊社スクールで学習し、無事ベンチャー企業のプログラマーとして転職に成功しました。そんな小池さんの学習法や転職体験談を伺いましたので、是非ご覧ください。

    「プログラミングができないSEは仕事がなくなる」不安を感じたSEが未経験から転職成功するまで
    更新日 : 2019年10月7日

    書いた人

    Sanshiro Wakizaka

    Sanshiro Wakizaka

    フリーランスエンジニア兼ライターのワキザカ サンシロウです。
    ExcelVBAの自動化ツール開発、WEB開発をメインにエンジニア業務をこなしつつ、サムライエンジニアにてライター業務をしております。

    プログラミングをこれからやってみたい方に向けて、ためになる記事を全力で書いていきますので宜しくお願い致します!

    おすすめコンテンツ

    あなたにぴったりなプログラミング学習プランを無料で診断!

    プログラミング学習の効率を劇的に上げる学習メソッドを解説