【ExcelVBA入門】QueryTablesメソッドで高速にファイルを読み込む方法

皆さんは、VBAのQueryTablesメソッドを使って高速にファイルを読み込む方法を知っていますか?

QueryTablesメソッドを使えば簡単にファイルを読み込むことができるのでおすすめです!

そこで今回は、

  • QueryTablesメソッドの基礎的な使い方
  • QueryTablesメソッドを使ったサンプルコード
  • エラーが出たときの対処方法について
  • マクロの記録を使って速くコードを書く方法

といった基礎的なことから、応用的な方法まで、徹底的に解説します!

目次

VBAでファイルを読み込む方法

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

  • Openメソッドを使って1行ずつデータを読み込む
  • QueryTablesメソッドを使ってファイルを読み込む


それぞれ、次のようなメリットがあります。

  • Openメソッド:シンプルな使い方でわかりやすい
  • QueryTablesメソッド:処理速度が圧倒的に速い


ファイル読み込みで検索すると、最初にOpenメソッドの使い方が出てくるケースが多いため、Openメソッドを使っている方も多いです。

ただ、処理が速いのはQueryTablesメソッドなので、CSV読み込みなど大規模データを取り込む場合は、QueryTablesメソッドを使うのがおすすめです!

今回は、QueryTablesメソッドの使い方に特化して解説するので、Openメソッドについて気になる方は以下を見てみてくださいね!

QueryTablesメソッドの使い方

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

QueryTablesメソッドは読み込むファイル指定したあと、プロパティ・メソッドで詳細な設定を追加して使います。

Dim queryTb As QueryTable
Set queryTb = Worksheets(1).QueryTables.Add(Connection,Destination)

With queryTb
	.プロパティ1
	.プロパティ2
	.プロパティ3
	.メソッド1
	.メソッド2
End With

AddメソッドはConnectionで読み込むファイル形式・ファイルパスを設定し、Destinationで値の貼り付け開始位置を指定します。

プロパティ・メソッドは数が多いので、よく使うものだけ抜粋して一覧化しました。

Noプロパティ・メソッド概要
1TextFilePlatform文字コードの指定
・932:Shift_JIS
・65001:UTF-8
2TextFileParseType区切り文字の方式
・xlDelimited:区切り文字によってファイルが区切る
・xlFixedWidth:ファイルのデータを固定幅の列として認識
3TextFileCommaDelimiterカンマ区切りに設定。True/Falseで指定。
4TextFileTabDelimiterタブ区切りに設定。True/Falseで指定。
5TextFileSemicolonDelimiterセミコロン区切りに設定。True/Falseで指定。
6TextFileSpaceDelimiterスペース区切りに設定。True/Falseで指定。
7TextFileOtherDelimiter区切り文字を指定できるに設定。True/Falseで指定。
8TextFileStartRow読み込み開始行の指定に設定。True/Falseで指定。
9RefreshStyleセルを上書きするか追加するかを設定する
・xlOverwriteCells : セルは追加せず上書きする
・xlInsertDeleteCells : レコードに合わせ行を追加削除する
・xlInsertEntireRows : セル又は行を削除せず、行を挿入する
10FieldNamesフィールド名を列名に設定。True/Falseで指定。
11Refresh実行するとデータを表示する
12Delete読み込むファイルとの接続を解除

サンプルコード

次に、サンプルコードをもとに、具体的な使い方を解説します!

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

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

サンプルコード:

Sub Test()
  Dim wsImport As Worksheet
  Set wsImport = Worksheets("CSV読み込み") 'CSVデータを取り込み用シート

  '読み込むファイル
  Dim strFilePath As String
  strFilePath = "C:UsersSamuraiDesktopVBAQueryTablesサンプルtest.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

実行結果:

このように、簡単にファイルを読み込むことができます。

補足:その他の処理高速化方法とは

QueryTablesメソッドはファイルを高速に読み込むことができる方法なのですが、処理を高速化する方法は他にもあります。

以下で詳しくまとめているので、気になる方は見てみてくださいね!

まとめ

今回は、ファイルを高速に読み込むためのQueryTablesメソッドの使い方について解説しました。

ExcelではCSVファイルや、テキストファイルを読み込むケースはよくあります。大規模なデータを使うことも多いので、ぜひ使ってみてくださいね!

この記事を書いた人

北海道出身の30歳で、フリーランスエンジニア兼テックライターとして活動中。新卒入社したメーカー系のIT企業で、システムエンジニアとして約5年勤務。

Webアプリ、業務アプリ開発において、要件定義 ~ 運用保守まで様々な経験あり。また3歳の娘がいる1児のパパで、日々娘との時間を確保するために仕事を頑張っています!
侍エンジニアでは、【誰でもわかるレベルのわかりやすさ】を意識して、記事を執筆中。

目次