VBAを使用したCSVデータの一括読み込み方法について備忘録的に紹介していきたいと思います。
今回紹介するのは、Workbooks.OpenText関数です。
こちらの関数を使って、マクロの醍醐味であるボタン一つで複数ファイルを一括して読み込んでみたいと思います。
テキストファイルをExcelで開くと出現するウィザードがありますが、それをVBAで操作するということです。
Excel「ファイル」タブ → 「開く」 → 任意のテキスト形式のファイルを選択すると、「テキストファイルウィザード」が出現します。(下を参考)
区切文字が異なるテキストファイル3つをエクセルブックに読み込む①
文字コード:UTF-8(BOM付き)、改行コード:CRLF、それぞれ区切り文字が異なる3つのテキストファイルを同フォルダ内のエクセルブックに一括して読み込みます。
WorkBooks.OpenText関数の主な引数
パラメーター | 内容 |
FileName | 読み込みたいテキストファイルの名前 |
Origin | Shift_JIS:932、UTF-8:65001など |
StartRow | 読み込み開始行、1行目からは1、2行目からは2と指定 |
DataType | xlDelimited:区切り文字によって開く |
Tab | 区切り文字がタブ:True |
Semicolon | 区切り文字がセミコロン:True |
Comma | 区切り文字がコンマ:True |
Space | 区切り文字がスペース:True |
Other | 区切り文字がその他:”*” 任意の区切り文字を指定 |
FieldInfo | Array(列番号,型)Array(列番号,型)と指定する ※別記参照 |
項目の型を指定 (FieldInfo)
定数 | 値 | 内容 |
xlGeneralFormat (既定) | 1 | 自動判定 |
xlTextFormat | 2 | 文字列 |
xlMDYFormat | 3 | MDY 日付形式 |
xlDMYFormat | 4 | DMY 日付形式 |
xlYMDFormat | 5 | YMD 日付形式 |
xlMYDFormat | 6 | MYD 日付形式 |
xlDYMFormat | 7 | DYM 日付形式 |
xlYDMFormat | 8 | YDM 日付形式 |
xlSkipColumn | 9 | その列を読み込まない |
xlEMDFormat | 10 | EMD 日付形式 |
列ごとに表示形式を指定できます。例えば1列目は自動判定の場合Array(1,1)と書きます。
区切文字が異なるテキストファイル3つをエクセルブックに読み込む②
Sub test()
Dim file As String
Dim flag As Boolean
Dim MaxRow As Long
'==①==
file = Dir(ThisWorkbook.Path & "\*.txt")
flag = True
Do While file <> ""
'==②==
Workbooks.OpenText ThisWorkbook.Path & "\" & file, 65001, , , , , True, True, True
Dim TxtWb As Workbook
'==③==
Set TxtWb = Workbooks.Item(Workbooks.Count)
Dim TxtWs As Worksheet
Set TxtWs = TxtWb.Sheets(1)
Dim AcWs As Worksheet
Set AcWs = ThisWorkbook.ActiveSheet
'==④==
If flag Then
TxtWs.Range("A1").CurrentRegion.Copy
AcWs.Range("A1").PasteSpecial
Application.CutCopyMode = False
Else
Intersect(TxtWs.Range("A1").CurrentRegion, TxtWs.Range("A1").CurrentRegion.Offset(1)).Copy
AcWs.Range("A" & MaxRow).PasteSpecial
Application.CutCopyMode = False
End If
MaxRow = AcWs.Range("A" & Rows.Count).End(xlUp).Row + 1
'==④-1====
flag = False
TxtWb.Close (False)
AcWs.Range("A1").Select
file = Dir()
Loop
Application.ScreenUpdating = True
End Sub
大まかなコードの流れ
① Dir関数で同じフォルダ内のテキスト形式ファイルを全て指定します。
Dir関数の説明については以前の記事に記載しています。
② Workbooks.OpenText関数・・関数で文字コードの指定、区切り文字の指定をしています。 ※関数入力のインテリセンスを使わない場合:Workbooks.OpenText ThisWorkbook.Path & "\" & file
,Origin:=65001,Tab:=True,Semicolon:=True,Comma:=True
③Workbooks.Item(Workbooks.Count)・・ワークブックコレクションの最後に開いたワークブック ※つまり②で開いたテキストファイルのことです。
④、④-1 最初に開いたテキストファイルのみ1行目(タイトル行)からコピペしますが、2番目以降は2行目からコピペするので、そのためのフラグを立てています。 1行目除外の方法として、Intersectメソッドを使用しています。
CSVファイル読み込みのためのADODB.ConnectionとADDB.REcordsetについての記事はこちら↓
まとめ
フォルダ内のテキストファイルを一括読み込みするためのコードを紹介しました。
WorkBooks.OpenText関数の紹介でしたが、テキストファイルウィザードの機能をVBAで操作するということですから、ひとまずテキストファイルウィザードの機能を熟知しておくと理解が早まると思います。
次回もExcelに関する有益な情報を紹介しています。
コメント