エクセルVBAのQueryTable.RefreshメソッドでCSVをシートに出力する方法

QueryTable.Refreshアイキャッチ
みなさん、こんにちは!
フジタニ(@libartweb)です。

エクセルVBAでQueryTableオブジェクトを使って高速にCSVを取り込む方法をシリーズでお伝えしております。

前回の記事はこちら

エクセルVBAのQueryTables.Addメソッドでクエリテーブルを作成する方法
エクセルVBAのQueryTables.AddメソッドでエクセルのWorksheet上にクエリテーブルを追加してそこにCSVを取り込む方法と、出力先セル位置を取得する方法を紹介します。

QueryTables.AddメソッドでWorksheet上にクエリテーブルを作成して、そこにCSVを取り込む方法をお伝えしました。

QueryTableオブジェクトを使用したCSV取り込みを理解する上で、第一歩である「クエリテーブルの作成」は非常に重要な内容でした。

今回は、クエリテーブルに取り込んだCSVをWorksheetに出力する方法をお伝えいたします!

スポンサーリンク

QueryTable.RefreshメソッドでWorksheetにCSVを出力する

QueryTable.Addメソッドで作成したクエリテーブルの状態

QueryTables.Addメソッドでクエリテーブルを作成しただけではWorksheetを見ても、空の状態です。

Worksheetには何も反映されていない
なにも反映されていませんね。

クエリテーブルという見えないテーブル上にCSVが取り込まれた状態ですが、まだそれをWorksheetに出力するための命令をしていないからです。

この後、Worksheetに出力する命令が必要となってきます。では、その方法を見ていきましょう!

QueryTable.Refreshとは

今回のサンプルコードは以下の通りです!

Private Sub csvImport()
    Dim strPath As String
    Dim qtCsv   As QueryTable
    
    strPath = "C:\Users\hirom\Desktop\test.csv"
    
    'QueryTableオブジェクトをQueryTables.Addメソッドで追加する
    Set qtCsv = Sheet1.QueryTables.Add(Connection:="TEXT;" & strPath, _
        Destination:=Sheet1.Range("A1")) '取り込むCSVファイルパスと、出力先のシート、セルを指定
    
    qtCsv.Refresh BackgroundQuery:=False 'CSVをWorksheetに出力する
End Sub

WorksheetにCSVを出力するには以下のメソッドを使用します。

QueryTableオブジェクト.Refreshメソッド(BackgroundQuery)

Refreshメソッドは非常に単純で、QueryTableオブジェクト内のCSVの内容をWorksheetに出力します。もしここでプロパティを設定していれば、設定した内容で出力されます。

このメソッドを実行しないと、取り込んだCSV、設定したプロパティなどはすべて反映されず、Worksheetは空の状態のままになってしまいます。

必ず記述しましょう。

QueryTable.Refreshの引数

引数にはBackgroundQueryがあります。TrueかFalseを指定します。

BackgroundQuery:=False

バグの原因となるので、通常はFalseを指定しましょう。

Trueを指定すると、バックグラウンドでのテーブル更新が有効となり、まだWorksheetへの出力が終わっていないのに、次のステップへ進んでしまいます。

場合によっては正しく出力されない、といったこともあります。

CSV取り込み時は基本的にFalse指定と覚えておいてください

実行結果

サンプルコードではQueryTableオブジェクトがどのような動きをするか?を最もシンプルな形で理解していただくために、何もプロパティを指定していません。

プロパティを指定しなかったらどうなるか?とりあえずCSVを出力します。

CSV取り込み結果

CSV自体は正しくWorksheetに反映されていますね!

でも、すべてのデータがカンマで区切られず、Aセルに出力されてしまっています。プロパティを指定しないとこんな結果になってしまいます。これでは使えません。

次回以降の記事で説明するプロパティを使えば、文字列の型や、カンマ区切りの指定など様々な設定が可能です。

以下の記事の、「ループを使用したCSV取り込みの方法」と同じように、カンマで区切ってCSVを取り込むこともできちゃいます。

エクセルVBAでCSVデータをカンマで区切ってワークシートに取り込む方法
エクセルVBAでCSVを取り込む方法です。今回は、Splitという命令と配列を使ってCSVのレコードをカンマで区切ってワークシートに転記をしていく方法について解説をしていきます。

まとめ・次回予告

以上、クエリテーブルに取り込んだCSVを、Worksheetに出力する方法を紹介しました。

この段階ではプロパティの指定がありませんので、出力されたCSVはデータとして使えるものではありません。

次回はいよいよプロパティの紹介です。

CSV取り込みでよく使うプロパティを取り上げます。え、こんなカンタンなの?!と驚くようなプロパティがたくさんあります。

プロパティを使いこなすことができれば、QueryTableオブジェクトを使用したCSV取り込みは、取り込みだけでなくコーディングまで高速化できます。

どうぞお楽しみに!

連載目次:エクセルVBAのQueryTableで高速にCSVを取り込む

一般的なループを使用したCSV取り込みよりも、更に高速にCSVを取り込むことのできるQueryTableオブジェクトに関する連載です。サイズの大きなCSVを取り込む際に非常に便利です。
  1. エクセルVBAでQueryTableオブジェクトを使って高速にCSVを取り込む方法
  2. エクセルVBAのQueryTables.Addメソッドでクエリテーブルを作成する方法
  3. エクセルVBAのQueryTable.RefreshメソッドでCSVをシートに出力する方法
  4. エクセルVBAのQueryTableオブジェクトのプロパティの基本とCSVをカンマ区切りする方法
  5. エクセルVBAのQueryTableオブジェクトであらゆる種類のCSVを取り込む方法
  6. エクセルVBAで高速にCSVを取り込むQueryTableオブジェクトの最終処理
  7. エクセルVBAでCSVを高速に取り込むQueryTableオブジェクト使用時の注意点

タイトルとURLをコピーしました