コピペで使えるVBA!複数のファイルにあるシートをコピーしてまとめるコード

スポンサーリンク




趣味のプログラム

VBAマクロで複数のブックにあるシートを1つのブックにまとめるコードを紹介します。

Worksheetsオブジェクトのcopyメソッドを使います。

コードをコピーすればすぐに使えます。

コピペ前提なので短さを優先してコードを書きました。

スポンサーリンク

マクロを実行しているブックにまとめる

エクセルファイルのあるフォルダにマクロのファイルを保存して実行

ブック シート1 シート2 シート3 シート4 シート5
マクロ.xlsm Sheet1
ブック1.xlsx Sheet1 Sheet2
ブック2.xlsx Sheet1 Sheet2

実行後

ブック シート1 シート2 シート3 シート4 シート5
マクロ.xlsm Sheet1 ブック1_Sheet1 ブック1_Sheet2 ブック2_Sheet1 ブック2_Sheet2
ブック1.xlsx Sheet1 Sheet2
ブック2.xlsx Sheet1 Sheet2

Sub 複数のブックのシートをマクロのブックにまとめる()
    Application.ScreenUpdating = False
    Set メインブック = ActiveWorkbook
    Set FSO = CreateObject("Scripting.FileSystemObject")
    For Each ファイル In FSO.GetFolder(ThisWorkbook.Path).Files
        If ファイル.Name = メインブック.Name Then Exit For
        If ファイル.Name Like "*.xl*" Then
            Set ターゲットブック = Workbooks.Open(ファイル.Name)
            For ターゲットシート = 1 To ターゲットブック.Worksheets.Count
                ターゲットブック.Worksheets(ターゲットシート).Copy After:=メインブック.Worksheets(メインブック.Worksheets.Count)
                メインブック.Worksheets(メインブック.Worksheets.Count).Name = Split(ターゲットブック.Name, ".")(0) & "_" & ターゲットブック.Worksheets(ターゲットシート).Name
            Next
            ターゲットブック.Close
        End If
    Next
    Set FSO = Nothing
    Application.ScreenUpdating = True
End Sub

新しいブックにまとめる

エクセルファイルのあるフォルダにマクロのファイルを保存して実行

ブック シート1 シート2 シート3 シート4 シート5
マクロ.xlsm Sheet1
ブック1.xlsx Sheet1 Sheet2
ブック2.xlsx Sheet1 Sheet2

実行後

ブック シート1 シート2 シート3 シート4 シート5
マクロ.xlsm Sheet1
ブック1.xlsx Sheet1 Sheet2
ブック2.xlsx Sheet1 Sheet2
New book! Sheet1 ブック1_Sheet1 ブック1_Sheet2 ブック2_Sheet1 ブック2_Sheet2

Sub 複数のブックのシートを新しいブックにまとめる()
    Application.ScreenUpdating = False
    Set マクロブック = ThisWorkbook
    Set メインブック = Workbooks.Add
    Set FSO = CreateObject("Scripting.FileSystemObject")
    For Each ファイル In FSO.GetFolder(ThisWorkbook.Path).Files
        If ファイル.Name = マクロブック.Name Or ファイル.Name = メインブック.Name Then Exit For
        If ファイル.Name Like "*.xl*" Then
            Set ターゲットブック = Workbooks.Open(ファイル.Name)
            For ターゲットシート = 1 To ターゲットブック.Worksheets.Count
                ターゲットブック.Worksheets(ターゲットシート).Copy After:=メインブック.Worksheets(メインブック.Worksheets.Count)
                メインブック.Worksheets(メインブック.Worksheets.Count).Name = Split(ターゲットブック.Name, ".")(0) & "_" & ターゲットブック.Worksheets(ターゲットシート).Name
            Next
            ターゲットブック.Close
        End If
    Next
    Set FSO = Nothing
    Application.ScreenUpdating = True
End Sub

VBAはどうやって覚える?

プログラムのコードが読めないと、参考にしているコードの理解や自分でプログラムを書くときに時間がかかってしまいます。
そんな時は基礎から学ぶと応用もできるようになり自分の作りたいプログラムがスムーズに作れるようになります。

無料でやるならネット上の学習サイトを参考にするといいです。
こちらはVBAの基礎から説明している無料のWEBサイトになります。

>>基礎から学べるWEBサイトを見てみる


過去にネットでの学習でつまずいた方には専門書をオススメします。
本なら基礎から学べる事はもちろん、読者視点で分かりやすい解説になっています。
一人で集中してコツコツ進めたい方は書籍を試してください。



本を読んでもわからない所が多すぎたり、誰かに質問したい場合はオンラインスクールを見てみましょう。
カウンセリングから目的に応じた学習プランと教材を提供してくれるので、プログラミングの敷居がとても低くなります。
誰かに相談できるのは心強いです。

>>オンラインスクールを無料体験で始める


最後まで読んで頂き、ありがとうございます。

「この記事が参考になった」「お礼でコーヒー代をプレゼントしよう」という方がいましたらチップ(15円〜)をお願いいたします。

Amazonギフト券- Eメールタイプ - Amazonベーシック

メールのあて先は 「mizusibuki8080@gmail.com」です。
※上記のアドレスは投げ銭受け取り専用です。他のメールは受け取れない設定にしてあるのでご注意ください。

趣味のプログラム
ネットワークエンジニアになった人
タイトルとURLをコピーしました