Excel VBAを使うと、複数のCSVファイルから必要なデータを取得し、指定したワークシートへ自動的に転記する処理を作成できます。特に店舗別や拠点別など、同じ形式のCSVを毎回取り込む作業は、マクロ化することで大幅に効率化できます。この記事では、フォルダ内にある複数のCSVファイルを開き、最終行までのデータを取得して対応するExcelシートへ貼り付ける方法を解説します。
複数CSVをVBAで転記する基本的な考え方
今回のような処理では、以下の流れでVBAを組むと分かりやすくなります。
- マクロファイルと同じフォルダ内のCSVファイルを指定する
- CSVファイルをVBAで開く
- A1:G列の最終データ行までを取得する
- 対応するマクロファイル内のシートへ値貼り付けする
- CSVファイルを保存せず閉じる
CSVファイル名と転記先シート名が対応している場合は、配列やループを利用するとコードを簡潔にできます。
CSVファイル名と転記先シートを対応付ける
今回は以下のような対応関係を作成します。
| CSVファイル | 転記先シート |
|---|---|
| 01_東京.csv | 東京シート |
| 02_名古屋.csv | 名古屋シート |
| 03_大阪.csv | 大阪シート |
このような固定の対応なら、配列にファイル名とシート名を登録して順番に処理すると管理しやすくなります。
CSVから最終行まで取得して転記するVBAコード例
以下は、マクロファイルと同じフォルダにある3つのCSVを読み込み、対応するシートへC1セルから値貼り付けするサンプルコードです。
Sub CSV転記()
Dim csvFiles As Variant
Dim sheetNames As Variant
Dim i As Long
Dim wbCSV As Workbook
Dim wsCSV As Worksheet
Dim wsDest As Worksheet
Dim lastRow As Long
Dim filePath As String
csvFiles = Array("01_東京.csv", "02_名古屋.csv", "03_大阪.csv")
sheetNames = Array("東京シート", "名古屋シート", "大阪シート")
Application.ScreenUpdating = False
For i = 0 To UBound(csvFiles)
filePath = ThisWorkbook.Path & "\" & csvFiles(i)
Set wbCSV = Workbooks.Open(filePath)
Set wsCSV = wbCSV.Worksheets(1)
lastRow = wsCSV.Cells(wsCSV.Rows.Count, "A").End(xlUp).Row
Set wsDest = ThisWorkbook.Worksheets(sheetNames(i))
wsDest.Range("C1").Resize(lastRow, 7).Value = wsCSV.Range("A1:G" & lastRow).Value
wbCSV.Close False
Next i
Application.ScreenUpdating = True
MsgBox "CSV転記が完了しました"
End Sub
このコードでは、CSVを開いて内容を読み込みますが、コピー操作ではなくValueによる代入を使っています。そのため、クリップボードを使用せず高速に処理できます。
コードの重要ポイントを解説
最終行の取得方法
Cells(Rows.Count, "A").End(xlUp).Rowを利用すると、A列に入力されている最後の行番号を取得できます。
例えばA1からA500までデータがある場合、取得される値は500になります。これにより、毎回データ件数が変わるCSVにも対応できます。
値貼り付けで転記するメリット
通常のコピー&ペーストでは、以下のような問題が発生する場合があります。
- クリップボードの状態に影響される
- 処理速度が遅くなる
- 貼り付け形式の問題が発生する
そのため、単純にデータだけを移したい場合は、Range.Valueによる直接代入がおすすめです。
CSVの列数やシート構成が変わる場合の注意点
今回の例ではA列からG列まで7列固定として処理しています。
もしCSVによって列数が変わる可能性がある場合は、最終列も自動取得するように変更すると安全です。
また、CSVファイル名やシート名が変更される場合は、配列部分だけ修正すれば対応できます。
既存データを消してから転記したい場合
毎回CSVの内容を最新状態に置き換えたい場合は、転記前に対象シートの既存データを削除します。
例えば以下のコードを転記前に追加できます。
wsDest.Range("C:G").ClearContents
これにより、以前のデータが残ったままになることを防げます。
まとめ|VBAなら複数CSVの定型転記作業を自動化できる
複数のCSVファイルを対応するExcelシートへ転記する作業は、VBAを利用することで簡単に自動化できます。
ファイル名とシート名の対応表を配列で管理し、CSVを開いて必要範囲だけ取得する方法にすると、データ数が変化しても柔軟に対応できます。
また、コピー&ペーストではなくValueによる直接代入を使うことで、高速で安定したマクロを作成できます。毎月や毎日のように発生するCSV取り込み作業であれば、ぜひVBAによる自動化を検討するとよいでしょう。


コメント