1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【メモ書き】VBAアウトプット QueryTableでCSVファイルを取り込んでみよう編 #1

Last updated at Posted at 2024-11-14

【メモ書き】VBAアウトプット QueryTableでCSVファイルを取り込んでみよう編 #1

100万行ほどのCSVをVBAで取り込もうとしたときに利用したVBAのQueryTablesメソッドを用いてCSVファイルを取り込む処理をメモ書きとして残しておきます。

1. インポートしてみる

Mainを実行すると「C:\csv\aiueo.csv」のCSVファイルをSheet1のA1セルに出力する。
※aiueo.csvの文字コードはSJIS

aiueo.csv
番号,名前,点数
1,田中,20
2,遠藤,35
3,浜田,40
4,松本,42
5,月亭,55
test.bas
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ファイルの文字列をそのまま吐き出しただけですね。)

image.png

大まかな手順として以下の流れで処理を実施しています。

① QueryTableにインポートしたいCSVファイルと出力先を設定

'取り込むCSVファイルと出力箇所を指定する
Set qt = iOutputSheet.QueryTables.Add( _
    Connection:="TEXT;" & iFilePath, _
    Destination:=iOutputRange _
)

QueryTables.Addメソッドの ConnectionDestinationを指定します。

名前 説明
Connection  インポートしたいcsvファイルのパスを設定する。接続文字列のプレフィックスとして"TEXT;"を記載する。
Destination 出力したいセル範囲の左上端を指定する。

② QueryTable.Refleshでシートに出力

QueryTable.RefleshでインポートしたCSVファイルをシートに吐き出します。

With qt
    '#プロパティ1
    '#プロパティ2
    '#プロパティ3
    'etc...
    .Refresh 'インポートしたデータを吐き出す
End With

本来であれば、プロパティ1, プロパティ2と記載してある箇所にプロパティを指定して、出力時の形式を整えます。(今回は何も指定しないで出力してみました。)

2. 出力データを整える

データの区切り文字である,(カンマ)が残ってしまっているので、区切り文字だということを明示してあげます。

sample1
With qt
    .TextFileCommaDelimiter = True '区切り文字はカンマ
    .TextFileParseType = xlDelimited '区切り文字で分割
    .Refresh 'インポートしたデータを吐き出す
End With

TextFileCommaDelimiterTextFileParseTypeを指定します。

名前 説明
TextFileCommaDelimiter ,(カンマ)区切りの場合、Trueを指定する。デフォルトはfalse。
TextFileParseType 区切り文字で分割されているファイルの場合、xlDelimitedを指定する。
固定幅でデータが並んでいるファイルの場合、xlFixedWidthを指定します。(今回はCSVファイルなので前者)

「sample1」のように、カンマ区切りで分割するという指定を行って実行してみます。
すると、以下のような結果になります。

image.png

きれいに表示されました。

#1はここまで。。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?