データの取り込みと集計 (手作業での操作例と、それをVBAで。)

■ Excel豆知識53





53-11 外部データの取込みを利用して一度にまとめて取り込む(VBA)
今度は、③のパターンのデータを外部データの取り込みを利用して複数のファイルを一度にまとめて取り
込むことをしてみます。
53-9「何らかの抽出を行って取り込むデータを一度にまとめて取り込む」のコードを土台にして
53-10「外部データの取込みを利用して毎月1回取り込む」のコードと組み合わせます。
Option Explicit

'***外部データの取込みで、まとめて1回で***
Sub データ取込()
    Dim FName As String
    Dim trSh As Worksheet
    Dim LastRow As Long, LR As Long
    Dim i As Long

    '取込用シートを変数に入れる
    Set trSh = Worksheets("取込用")

    'ファイル名を変数に取得
    FName = Dir(ThisWorkbook.Path & "\CSV保存用\*.CSV")

    'ファイル名書込行の初期値
    i = 2

    '画面の更新を止める
    'ブックを開く行為がありませんので、これは無くてもいいような気もしますが、一応。
    Application.ScreenUpdating = False

    '取得したファイル名がある間作業を繰り返す
    Do While FName <> ""
        '外部データの取り込みでデータを「取込用」シートに取得
        With trSh.QueryTables.Add(Connection:= _
            "TEXT;" & ThisWorkbook.Path & "\CSV保存用\" & FName _
            , Destination:=trSh.Range("A1"))
            .TextFileCommaDelimiter = True
            .TextFileColumnDataTypes = Array(2, 1, 1, 2, 1, 5, 1, 1, 1)
            .Refresh BackgroundQuery:=False
            .Delete
        End With

        '和暦の6桁の数字を日付に変換
        With trSh
            LR = .Cells(.Rows.Count, 1).End(xlUp).Row
            .Range("AA2:AA" & LR).FormulaR1C1 = "=TEXT(RC7+19880000,""0000!/00!/00"")*1"
            .Range("G2:G" & LR).Value = .Range("AA2:AA" & LR).Value
            .Columns("G:G").NumberFormatLocal = "ge.m.d"
            .Columns("AA:AA").Clear
        End With

        '取り込んで、整形もしたデータを、「Data」シートに追加
        With Worksheets("Data")
            LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
            'データシートに項目行を除いて追加
            trSh.Range("A1").CurrentRegion.Offset(1).Copy Destination:=.Cells(LastRow + 1, 1)
        End With
        '取込用シートをクリア
        trSh.Range("A1").CurrentRegion.Clear

        '取り込んだファイル名をセルに入力
        With Worksheets("取込ファイル名")
            .Cells(i, 1).Value = FName
            i = i + 1
        End With

        '次のファイル名を取得
        FName = Dir()
    Loop

    '画面の更新を戻す
    Application.ScreenUpdating = True
    MsgBox "取込が終わりました。"
End Sub


これでおしまいです。
ページTOPへ