毎回「コピー&ペースト」していませんか?
実務上では、複数のファイルを一つのファイルに情報を集約する作業、多くないですか?
- 営業部、経理部、総務部など、各部署から提出されるExcelファイル・・・
- 毎回ファイルを開いて、必要なデータをコピー&ペースト・・・
- 気が付けば1時間、なんてことありませんか?
この作業、VBAで自動化できます。
ゴール
今回の想定としては、複数のファイルから1つのシートにまとめるイメージでVBAを考えていきます。
- 指定フォルダ内のすべてのExcelファイルがある
- 特定のシートのデータを読み取る
- 1つの集計シートにまとめる!
具体例
想定
- 各部署が月末に”売上データ.xlsx”のようなファイルを提出
- ファイルのシート名はすべて”売上”で統一
- データの範囲は”A1:D10″
- それを1つのExcelファイルにまとめたい!
フォルダ選択からデータ統合までまとめたマクロ
次のマクロで、フォルダ選択→ファイル読込→データ統合ができます。
Sub ConsolidateData()
Dim folderPath As String
Dim fileName As String
Dim wbSource As Workbook
Dim wsSource As Worksheet
Dim wsTarget As Worksheet
Dim lastRow As Long
Dim pasteRow As Long
' フォルダ選択ダイアログ
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = -1 Then
folderPath = .SelectedItems(1)
Else
MsgBox "フォルダが選択されていません"
Exit Sub
End If
End With
' 集計先シートの準備
Set wsTarget = ThisWorkbook.Sheets("集計")
With wsTarget
.Cells.ClearContents
.Range("A1").Value = "部署名"
.Range("B1").Value = "商品"
.Range("C1").Value = "数量"
.Range("D1").Value = "金額"
End With
pasteRow = 2
' フォルダ内のファイルを順に処理
fileName = Dir(folderPath & "¥*.xlsx")
Do While fileName <> ""
Set wbSource = Workbooks.Open(folderPath & "¥" & fileName)
Set wsSource = wbSource.Sheets("売上")
lastRow = wsSource.Cells(wsSource.Rows.Count, 1).End(xlUp).Row
' データをコピー(部署名を追加して転記)
wsTarget.Cells(pasteRow, 1).Resize(lastRow - 1).Value = wbSource.Name
wsSource.Range(wsSource.Cells(2, 1), wsSource.Cells(lastRow, 4)).Copy _
wsTarget.Cells(pasteRow, 2)
pasteRow = wsTarget.Cells(wsTarget.Rows.Count, 1).End(xlUp).Row + 1
wbSource.Close False
fileName = Dir()
Loop
MsgBox "データの統合が完了しました!"
End Sub
コードの説明
With Application.FileDialog
でフォルダ選択をダイアログ表示Dir
関数でフォルダ内のすべての.xlsx
ファイルを取得- 1つずつ開いて、”売上”シートのデータをコピー
- 集計先のシート”集計”に順次貼り付け
- ファイル名(部署名の代わり)も併せて記載
なお、「.Show = -1」は、ダイアログ(ファイルの選択時のポップアップ)で、「はい」は「-1」、「いいえ」は「0」でVBA上は把握しています。
よくある質問(Q&A)
Q1. シート名が違う場合は?
例えば、1シート目とルールを決めておけば、名前が違っても、Set wsSource = wbSource.Sheets(1)
とすれば1枚目のシートを指定できます。
Q2. ファイルが開かない・壊れている?
エラー回避処理(On Error Resume Next
)を使って、開けないファイルをスキップする方法があります。
まとめ
今回は、フォルダ内にある各部署から提出されたExcelファイルを、自動で開き、それぞれの”売上”シートから必要なデータを読み取り、1つの”集計”シートにまとめる方法を学びました。
手作業で行っていたコピー&ペーストの作業をマクロで効率化し、処理時間を大幅に短縮する実用的なテクニックです。
- 各部署から集まるファイルの統合はVBAで時短!
- 毎月同じ作業なら自動化するのが効率的
- フォルダを選ぶだけで、集計作業が完了!
コメント