みなさん、こんにちは!
フジタニ(@libartweb)です。
エクセルVBAでCSVを高速に取り込むQueryTableオブジェクトの使い方についてシリーズでお伝えしております。
今回はいよいよQueryTableオブジェクトのプロパティを紹介します。
前回の記事はこちら
QueryTables.Addメソッドで作成したクエリテーブルをQueryTable.RefreshメソッドでWorksheetに出力するところまで紹介しました。
しかし以前までの記事だとプロパティ指定をしていなかったので、Worksheetに出力されたCSVはデータとして使える形式ではありませんでした。
今回はQueryTableオブジェクトのプロパティの基本をお伝えし、CSVをカンマで区切る方法を解説します。
様々なプロパティを操ることができれば、CSVを様々な形式で取り込むことが可能です!
CSV取り込みで使うQueryTableプロパティ一覧
今回のサンプルコードはこちら
Private Sub csvImport()
Dim strPath As String
Dim qtCsv As QueryTable
strPath = "C:\Users\hirom\Desktop\test.csv"
Set qtCsv = Sheet1.QueryTables.Add(Connection:="TEXT;" & strPath, _
Destination:=Sheet1.Range("A1")) '取り込むCSVファイルパスと、取り込み先のシート、セルを指定
With qtCsv
.TextFileCommaDelimiter = True 'カンマ区切りの指定
.TextFileParseType = xlDelimited ' 区切り文字の形式
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) '項目(列)の型指定
.TextFileStartRow = 1 '開始行の指定
.TextFileTextQualifier = xlTextQualifierDoubleQuote '引用符の指定
.TextFilePlatform = 932 '文字コードの指定
.Refresh 'QueryTableオブジェクトを更新し、シート上に出力
.Delete 'QueryTableオブジェクトを削除
End With
End Sub
QueryTableオブジェクトにはたくさんのプロパティが存在します。CSV取り込みで主に使うプロパティは下記の通りです。
プロパティ名 | 内容 | 設定値の型 |
---|---|---|
TextFileCommaDelimiter | カンマ区切り | Boolean(真偽値) |
TextFileColumnDataTypes | 項目の型 | Variant(配列) |
TextFileParseType | 区切り文字の形式 | XlTextParsingTypeクラスの定数 |
TextFileStartRow | 取り込み開始行 | long(数値) |
TextFileTextQualifier | 引用符 | XlTextQualifierクラスの定数 |
TextFilePlatform | 文字コード | XlPlatformクラスの定数 |
では説明していきます!
QueryTableオブジェクトの各プロパティをエクセルの画面上で理解する
プロパティの取っつきにくさで理解が難しい!という方は、実際にエクセルの画面上から操作して、理解を深めましょう。
今回紹介するプロパティはエクセルの画面上からすべて設定可能です。
「テキストファイルウィザード」を開いてみましょう。
データタブ→テキストファイル
から開くことが可能です。
まとめると以下の通りです。
プロパティ名 | エクセルの画面上の表記 |
---|---|
TextFileCommaDelimiter | 区切り文字 |
TextFileColumnDataTypes | 列のデータ形式 |
TextFileParseType | 元のデータ形式 |
TextFileStartRow | 取り込み開始行 |
TextFileTextQualifier | 文字列の引用符 |
TextFilePlatform | 元のファイル |
QueryTableプロパティの指定方法
CSVをカンマ区切りで取り込む
CSVをカンマ区切りで取り込むには、以下のTextFileCommaDelimiterプロパティを使います。(前回の記事では、CSVをカンマ区切りで取り込めていませんでした。)
既定値:Flase
カンマ区切りを指定します。TrueにすることでCSVをカンマ区切りで取り込むことができます。
TextFileCommaDelimiter = True
CSVをカンマ区切りで取り込む場合、最低限必要なのがこのTextFileCommaDelimiterプロパティの指定です。
実行結果
TextFileCommaDelimiterプロパティを指定しなかった場合(Falseの場合)
TextFileCommaDelimiterプロパティをTrueで指定した場合
カンマ区切りで取り込まれました!
TextFileCommaDelimiterプロパティは、必ず省略せずに指定しましょう。
ちなみに、ループを使用したCSV取り込みの方法だと以下のようにカンマ区切りを行います。
まとめ
以上、QueryTableオブジェクトでCSVをカンマ区切りで取り込むのに最低限覚えておくべきTextFileCommaDelimiterプロパティについて紹介しました。
実際のエクセルの画面上でもどの設定項目がどのプロパティを表しているのか?をイメージしていただけたと思います。
冒頭の表で紹介した、今回紹介していないプロパティは次回、紹介します。
文字列型で取り込んだり、文字コードを指定したり…
次回の記事で説明するプロパティを応用することで、さらに自在にCSVを操れるようになります!
どうぞお楽しみに!
連載目次:エクセルVBAのQueryTableで高速にCSVを取り込む
一般的なループを使用したCSV取り込みよりも、更に高速にCSVを取り込むことのできるQueryTableオブジェクトに関する連載です。サイズの大きなCSVを取り込む際に非常に便利です。- エクセルVBAでQueryTableオブジェクトを使って高速にCSVを取り込む方法
- エクセルVBAのQueryTables.Addメソッドでクエリテーブルを作成する方法
- エクセルVBAのQueryTable.RefreshメソッドでCSVをシートに出力する方法
- エクセルVBAのQueryTableオブジェクトのプロパティの基本とCSVをカンマ区切りする方法
- エクセルVBAのQueryTableオブジェクトであらゆる種類のCSVを取り込む方法
- エクセルVBAで高速にCSVを取り込むQueryTableオブジェクトの最終処理
- エクセルVBAでCSVを高速に取り込むQueryTableオブジェクト使用時の注意点