こんにちは、フリーランスエンジニア兼ライターのワキザカ サンシロウです。
皆さんは、VBAで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メソッドどちらがいいの?
ここまで読んだ方は、次のような疑問を持っているのではないでしょうか。
正直言うと、どちらも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で使うケースはよくあります。使い方も簡単なので、ぜひ使ってみてくださいね!