【メモ書き】VBAアウトプット QueryTableでCSVファイルを取り込んでみよう編 #1
100万行ほどのCSVをVBAで取り込もうとしたときに利用したVBAのQueryTablesメソッドを用いてCSVファイルを取り込む処理をメモ書きとして残しておきます。
1. インポートしてみる
Mainを実行すると「C:\csv\aiueo.csv」のCSVファイルをSheet1のA1セルに出力する。
※aiueo.csvの文字コードはSJIS
番号,名前,点数
1,田中,20
2,遠藤,35
3,浜田,40
4,松本,42
5,月亭,55
Option Explicit
Sub Main()
Dim outputSheet As Worksheet '出力するワークシート
Dim outputRange As Range '出力するセル
Dim filePath As String 'CSVのファイルパス
'パラメータを設定
filePath = "C:\csv\aiueo.csv"
Set outputSheet = ThisWorkbook.Sheets(1)
Set outputRange = outputSheet.Range("A1")
'CSV取り込み処理を呼び出し
Call CsvToSheet(filePath, outputSheet, outputRange)
End Sub
'指定したファイルパスのCSVファイルを取り込む
Sub CsvToSheet(ByVal iFilePath As String, ByRef iOutputSheet As Worksheet, ByRef iOutputRange As Range)
Dim qt As QueryTable
'取り込むCSVファイルと出力箇所を指定する
Set qt = iOutputSheet.QueryTables.Add( _
Connection:="TEXT;" & iFilePath, _
Destination:=iOutputRange _
)
With qt
'#プロパティ1
'#プロパティ2
'#プロパティ3
'etc...
.Refresh 'インポートしたデータを吐き出す
End With
End Sub
実行結果は以下のようになります。(ただcsvファイルの文字列をそのまま吐き出しただけですね。)
大まかな手順として以下の流れで処理を実施しています。
① QueryTableにインポートしたいCSVファイルと出力先を設定
'取り込むCSVファイルと出力箇所を指定する
Set qt = iOutputSheet.QueryTables.Add( _
Connection:="TEXT;" & iFilePath, _
Destination:=iOutputRange _
)
QueryTables.Add
メソッドの Connection
とDestination
を指定します。
名前 | 説明 |
---|---|
Connection | インポートしたいcsvファイルのパスを設定する。接続文字列のプレフィックスとして"TEXT;"を記載する。 |
Destination | 出力したいセル範囲の左上端を指定する。 |
② QueryTable.Refleshでシートに出力
QueryTable.Reflesh
でインポートしたCSVファイルをシートに吐き出します。
With qt
'#プロパティ1
'#プロパティ2
'#プロパティ3
'etc...
.Refresh 'インポートしたデータを吐き出す
End With
本来であれば、プロパティ1, プロパティ2と記載してある箇所にプロパティを指定して、出力時の形式を整えます。(今回は何も指定しないで出力してみました。)
2. 出力データを整える
データの区切り文字である,
(カンマ)が残ってしまっているので、区切り文字だということを明示してあげます。
With qt
.TextFileCommaDelimiter = True '区切り文字はカンマ
.TextFileParseType = xlDelimited '区切り文字で分割
.Refresh 'インポートしたデータを吐き出す
End With
TextFileCommaDelimiter
とTextFileParseType
を指定します。
名前 | 説明 |
---|---|
TextFileCommaDelimiter |
, (カンマ)区切りの場合、Trueを指定する。デフォルトはfalse。 |
TextFileParseType | 区切り文字で分割されているファイルの場合、xlDelimited を指定する。固定幅でデータが並んでいるファイルの場合、 xlFixedWidth を指定します。(今回はCSVファイルなので前者) |
「sample1」のように、カンマ区切りで分割するという指定を行って実行してみます。
すると、以下のような結果になります。
きれいに表示されました。
#1はここまで。。