Excel VBAで他のブックからデータをコピーするやり方を説明します。
今回はUSBメモリ(私のPCではDドライブ)に下記の3つのファイルが保存してあります。
- 中村店8月売上
- 名古屋北店売上
- 8月売上集計
1と2のファイルからデータを読み込み3番のファイルにコピーします。
VBAのプログラムは3番目のファイルで作成します。
それぞれのファイルのデータは以下のようになっています。
中村店8月売上
名古屋北店8月売上
8月売上集計
8月売上集計のExcelファイルを開き
下記のコードを入力します。
Sub 集計()
Dim wb As Workbook
Dim sh As Worksheet
Dim lastRowNo As Long
'1店舗目のデータのコピー
Set wb = Workbooks.Open("D:\中村店8月売上.xlsx")
Set sh = wb.Sheets(1)
lastRowNo = sh.Cells(Rows.Count, "A").End(xlUp).Row
Range(Cells(2, "A"), Cells(lastRowNo, "F")).Copy
wb.Close
lastRowNo = Cells(Rows.Count, "A").End(xlUp).Row
Cells(lastRowNo + 1, "A").PasteSpecial
'2店舗目のデータコピー
Set wb = Workbooks.Open("D:\名古屋北店8月売上.xlsx")
Set sh = wb.Sheets(1)
lastRowNo = sh.Cells(Rows.Count, "A").End(xlUp).Row
Range(Cells(2, "A"), Cells(lastRowNo, "F")).Copy
wb.Close
lastRowNo = Cells(Rows.Count, "A").End(xlUp).Row
Cells(lastRowNo + 1, "A").PasteSpecial
End Sub
このプログラムを実行する時に他の2つのファイル(中村店と名古屋北店のファイル)は閉じておいてください。
そうしないとエラーになります。
変数の定義
Dim wb As Workbook 'wbはワークブックオブジェクト(プログラムの中でExcelを開くために使用)
Dim sh As Worksheet 'wsはワークシートオブジェクト
Dim lastRowNo As Long 'データの最終行を格納
1店舗目のデータのコピー、張り付け
Set wb = Workbooks.Open("D:\中村店8月売上.xlsx")
'1つ目のブックを開き(Open)ます。
'ファイルのパスは、保存先に合わせて変更してください。
Set sh = wb.Sheets(1)
'開いたブックの1つ目のシート
lastRowNo = sh.Cells(Rows.Count, "A").End(xlUp).Row
'開いたブックの最終行を取得
Range(Cells(2, "A"), Cells(lastRowNo, "F")).Copy
'開いたブックの2行目から最終行までコピー
wb.Close
'開いたブックを閉じます。必ず!
'以下、8月売上集計ブックでの処理
lastRowNo = Cells(Rows.Count, "A").End(xlUp).Row
'8月売上集計の最終行
Cells(lastRowNo + 1, "A").PasteSpecial
'最終行の1行したに張り付け(PasteSpecial)
2店舗目の処理は1店舗目の処理と同じです。
8月売上集計の最終行にデータをコピーしています。
オブジェクトの設定
Workbook、Worksheetオブジェクトを設定する場合は必ず
Set wb =
と書きます。最初に「Set」と書いてあることに注意してください。
コメントをお書きください