ExcelVBAを使ったCSVデータの読み込み まとめ④

Excel
スポンサーリンク

VBAを使用したCSVデータの一括読み込み方法について備忘録的に紹介していきたいと思います。

今回紹介するのは、Workbooks.OpenText関数です。

こちらの関数を使って、マクロの醍醐味であるボタン一つで複数ファイルを一括して読み込んでみたいと思います。

テキストファイルをExcelで開くと出現するウィザードがありますが、それをVBAで操作するということです。

Excel「ファイル」タブ → 「開く」 → 任意のテキスト形式のファイルを選択すると、「テキストファイルウィザード」が出現します。(下を参考)

テキストファイルウィザード
スポンサーリンク

区切文字が異なるテキストファイル3つをエクセルブックに読み込む①

文字コード:UTF-8(BOM付き)改行コード:CRLFそれぞれ区切り文字が異なる3つのテキストファイルを同フォルダ内のエクセルブックに一括して読み込みます。

3つのテキストファイル
セミコロン区切(ファイルの中身)
タブ区切り(ファイルの中身)

WorkBooks.OpenText関数の主な引数

パラメーター内容
FileName読み込みたいテキストファイルの名前
OriginShift_JIS:932、UTF-8:65001など
StartRow読み込み開始行、1行目からは1、2行目からは2と指定
DataTypexlDelimited:区切り文字によって開く
Tab区切り文字がタブ:True
Semicolon区切り文字がセミコロン:True
Comma区切り文字がコンマ:True
Space区切り文字がスペース:True
Other区切り文字がその他:”*”  任意の区切り文字を指定
FieldInfoArray(列番号,型)Array(列番号,型)と指定する ※別記参照
パラメーター

項目の型を指定 (FieldInfo)

定数内容
xlGeneralFormat (既定)1自動判定
xlTextFormat2文字列
xlMDYFormat3MDY 日付形式
xlDMYFormat4DMY 日付形式
xlYMDFormat5YMD 日付形式
xlMYDFormat6MYD 日付形式
xlDYMFormat7DYM 日付形式
xlYDMFormat8YDM 日付形式
xlSkipColumn9その列を読み込まない
xlEMDFormat10EMD 日付形式
項目の型

列ごとに表示形式を指定できます。例えば1列目は自動判定の場合Array(1,1)と書きます。

区切文字が異なるテキストファイル3つをエクセルブックに読み込む②

大まかなコードの流れ

① 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メソッドを使用しています。


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

まとめ

フォルダ内のテキストファイルを一括読み込みするためのコードを紹介しました。

WorkBooks.OpenText関数の紹介でしたが、テキストファイルウィザードの機能をVBAで操作するということですから、ひとまずテキストファイルウィザードの機能を熟知しておくと理解が早まると思います。

次回もExcelに関する有益な情報を紹介しています。

コメント

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