
エクセルの便利な機能の一つに、複数Excelシートをひとつにすることがありますが、その効率的な利用にはVBAマクロの利用です。
VBAマクロを活用して複数Excelシートをひとつに集める方法で、あなたのスキル向上と業務効率化をサポートする情報をお届けします。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 命令の意味は分かるけど、何に使うのか分からないと感じている方へ。 データ分割を題材に、実務の流れの中で理解できる講座です。 ↓↓↓↓↓
30万人が読んだ記事をもとに再構成。
▶ 自分で作れるレベルへ(こちらから閲覧できます)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
複数シートを1つにまとめるVBAマクロ|どんな場面で使える?
複数のExcelファイルのシートから売上データを集めて一つのシートにする。このエクセルVBAマクロで、売上データの集計が手動作業から解放され効率が大幅に向上します。
日々の売上データを担当者別のExcelファイルで管理して、月末でまとめて集計しないといけないとき、いままでのコピペなどの手作業は、一瞬でシートひとつにまとめられるので、大幅な時間短縮になります。
複数Excelシートを1つに統合するマクロコード|そのまま使える
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 命令の意味は分かるけど、何に使うのか分からないと感じている方へ。 データ分割を題材に、実務の流れの中で理解できる講座です。 ↓↓↓↓↓
30万人が読んだ記事をもとに再構成。
▶ 自分で作れるレベルへ(こちらから閲覧できます)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
指定したフォルダ内のすべてのExcelファイルを順番に開き、各ファイルのデータを1つのシートにまとめる処理です。
最初のファイルのヘッダー行は一度だけコピーし、それ以降のファイルはデータのみを追加していきます。すべてのファイルを処理し終えると、統合されたデータが1つのシートに集まります。
サンプルのキャプチャ
「挿入」クリック>プルダウン表示>「ユーザーフォーム」クリック>「ツールボックス」からコントロールを選び、デザインした画面(デザインは、上から下、左右がある場合は、1段目右から1段目左、2段目右から2段目左・・・処理順がわかるようにするといいです)

「収集ボタン」をクリック>右クリック>プルダウン表示>コードの表示>ここからコード入力します

コード入力したキャプチャ

複数シート統合マクロのコード全文
- Option Explicit
- Private Sub CommandButton1_Click()
- Dim ws As Worksheet
- Dim FolderPath As String
- Dim FilePath As String
- Dim lastRow As Long
- Dim targetSheet As Worksheet
- Dim isFirstFile As Boolean
- ' 統合先のシートを指定
- Set targetSheet = ThisWorkbook.Sheets("SalesData")
- ' フォルダパスを指定
- FolderPath = "C:\Users\User\Desktop\SalesData\"
- FilePath = Dir(FolderPath & "*.xlsx")
- ' 初回ファイルフラグをTrueに設定
- isFirstFile = True
- ' ファイルが存在する限りループ
- Do While FilePath <> ""
- ' ファイルを開いて、最初のシートを取得
- Set ws = Workbooks.Open(FolderPath & FilePath).Sheets(1)
- ' 統合先のシートの最終行を取得
- lastRow = targetSheet.Cells(targetSheet.Rows.Count, "A").End(xlUp).Row
- If isFirstFile Then
- ' 見出し行を最初の1回のみコピー
- ws.Rows(1).Copy targetSheet.Rows(1)
- isFirstFile = False
- End If
- ' データ行をコピー(見出し行を除く)
- ws.Range("A2:L" & ws.Cells(ws.Rows.Count, "A").End(xlUp).Row).Copy _
- targetSheet.Cells(lastRow + 1, 1)
- ' ファイルを閉じる(保存しない)
- Workbooks(FilePath).Close False
- ' 次のファイルを取得
- FilePath = Dir
- Loop
- End Sub
VBAコードの仕組みと動作の解説
ユーザーフォーム(簡単に利用できるようにするため、標準モジュールは使っていません)
1. Option Explicit
・変数を使用する前に必ず宣言するよう強制する命令です。これにより、スペルミスなどによるエラーを防ぐことができます。
2. Private Sub CommandButton1_Click()
・この行は、Excelのユーザーフォームやシートに配置されたボタン(CommandButton1)がクリックされたときに実行される処理を定義しています。
3. 変数の宣言
Dim ws As Worksheet
Dim FolderPath As String
Dim FilePath As String
Dim lastRow As Long
Dim targetSheet As Worksheet
Dim isFirstFile As Boolean
・ws
現在開いているExcelファイルのシートを指します。
・FolderPath
取り込みたいExcelファイルが格納されているフォルダのパスを文字列として保存します。
・FilePath
現在処理中のファイルのパスを保存します。
・lastRow
データを貼り付ける際に使用するシートの最終行を示します。
・targetSheet
データを統合する対象のシートを指します。
・isFirstFile
最初のファイルかどうかを判別するためのフラグです。
4. 統合先のシートを指定
Set targetSheet = ThisWorkbook.Sheets("SalesData")
・現在のブック(ThisWorkbook)の最初のシートをデータ統合のためのターゲットシートとして設定しています。
5. フォルダパスを指定
FolderPath = "C:\Users\User\Desktop\SalesData\"
FilePath = Dir(FolderPath & "*.xlsx")
・FolderPathには、データを取り込むExcelファイルが保存されているフォルダのパスを設定します。
・FilePathには、フォルダ内の最初のExcelファイルのパスを設定します。Dir(FolderPath & "*.xlsx")は、指定したフォルダ内の全てのExcelファイル(拡張子が.xlsx)を取得します。
6. 初回ファイルフラグを設定
isFirstFile = True
・isFirstFileをTrueに設定することで、最初のファイルかどうかを判別します。最初のファイルの場合のみ、ヘッダー行(見出し行)を統合先にコピーします。
7. ファイルが存在する限りループ
Do While FilePath <> ""
・この行から始まるDo Whileループは、FilePathが空でない限り、つまりフォルダ内に処理すべきファイルが残っている限りループを続けます。
8. ファイルを開いて、最初のシートを取得
Set ws = Workbooks.Open(FolderPath & FilePath).Sheets(1)
・Workbooks.Openでファイルを開き、その中の最初のシートをwsに設定します。このシートからデータをコピーします。
9. 統合先のシートの最終行を取得
lastRow = targetSheet.Cells(targetSheet.Rows.Count, "A").End(xlUp).Row
・targetSheetの列Aの最終行を取得します。データを貼り付ける位置を特定するために使います。
10. 見出し行を最初の1回のみコピー
If isFirstFile Then
ws.Rows(1).Copy targetSheet.Rows(1)
isFirstFile = False
End If
・最初のファイルの場合、シートの1行目(ヘッダー行)をtargetSheetの1行目にコピーします。そしてisFirstFileをFalseに設定して、次のファイルからは見出し行をコピーしないようにします。
11. データ行をコピー(見出し行を除く)
ws.Range("A2:L" & ws.Cells(ws.Rows.Count, "A").End(xlUp).Row).Copy _
targetSheet.Cells(lastRow + 1, 1)
・wsのデータ行(2行目以降)を範囲指定してコピーし、targetSheetのlastRow + 1行目から貼り付けます。これにより、データが順番に追加されていきます。
12. ファイルを閉じる(保存しない)
Workbooks(FilePath).Close False
・データをコピーした後、処理したファイルを保存せずに閉じます。
13. 次のファイルを取得
FilePath = Dir
・Dir関数で次のファイルを取得し、ループが続きます。
14. ループの終了
Loop
・すべてのファイルが処理されるまでループが続き、処理するファイルがなくなるとループが終了します。
このようにして、複数のExcelファイルのシートから、ひとつのExcelファイルのシートひとつに、データをまとめることができます。
このコード、実はChatGPTでも作れます 今回紹介したマクロは、ChatGPTを活用することで自分でも作れるようになります。 ただし、多くの方が、 そこで、実際の業務でよく使われる これらを題材に、ChatGPTを使ったExcel業務自動化の方法をまとめました。 この教材で学べること ✅ ChatGPTでVBAを書く方法 VBAを一から勉強するのではなく、ChatGPTを活用して仕事を効率化したい方へ。
・エラーが出る
・思った通りに動かない
・修正方法が分からない
という壁にぶつかります。
✅ エラーを修正する方法
✅ CSV取込を自動化する方法
✅ シート分割・シート結合を自動化する方法
✅ すぐ使える実務プロンプト集

