スライドショー

【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だけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

    • システムエンジニアという職業だけどコードが書けない
    • 事務作業が多くスキルがないため将来が不安
    • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
    という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

    弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

    既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

    まずは無料体験レッスンを予約する

    書いた人

    Sanshiro Wakizaka

    Sanshiro Wakizaka

    新卒入社したメーカー系のIT企業で、システムエンジニアとして約5年勤務。
    Webアプリ、業務アプリ開発において、要件定義、設計、インフラ、製造、テスト、運用保守など、様々な経験あり。
    また、侍ブログ編集部として、これまでに200記事以上の記事を執筆。
    現在はフリーランスエンジニア兼テックライターとして活動中。

    おすすめコンテンツ

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

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