複数のエクセルファイルを1つのブックにまとめる(シート別)マクロの解説!

複数のエクセルファイルを1つのブックにまとめる(シート別)マクロの解説!

 

Excelで複数のブックやシートをひとつにまとめたいことって、時々ありますよね?

そこで今回は「複数のエクセルファイルを1つのブックにまとめる方法(シート別)」をExcelマクロで解説していきたいと思います。

 

 本記事でわかること

1.複数のエクセルファイルを1つのブックにまとめる(シート別)マクロの使い方

2.複数のエクセルファイルを1つのブックにまとめる(シート別)マクロの作り方

 

本記事で紹介するマクロを使うと、以下図のように複数のエクセルファイルを1つのブックにまとめる方法(シート別)ことができます。

 

■Before

複数点在しているExcelブックを・・・

 

■After

1つのブックにまとめられる!

 

複数のエクセルファイルを1つのブックにまとめる(シート別)マクロの導入手順

 

ではさっそく、「複数のエクセルファイルを1つのブックにまとめるマクロの導入手順」をご紹介していきます。

いくつかの手順に分けてご紹介しますので、ひとつひとつ順番に実践してみてくださいね。

 

 複数のエクセルを1つにまとめるマクロの導入手順

1.エクセルファイルを用意する

2.コードを「標準モジュール」に貼り付ける

3.実行ボタンを設置

 

手順①:エクセルファイルを用意する

 

まずはマクロを実行するためのエクセルファイルを用意しましょう。

 

1.「ファイル」タブを選択

 

2.「名前を付けて保存」を選択

 

3.保存したいフォルダを選択し、ダイアログを開く

 

4.「ファイルの種類」⇒「Excel マクロ有効ブック(*.xlsm)」⇒「保存」

 

5.タブエリアで右クリック ⇒ 「リボンのユーザー設定」を選択

 

6.「開発」にチェックをいれる ⇒ OK

 

7.タブエリアに「開発」が入っていることを確認しましょう!

 

以上で、エクセルマクロを実行するためのファイルを準備できました。

次はいよいよ、コードを挿入していきますよ!

といっても難しくないので、ひとつひとつやっていきましょう。

 

手順②:コードを「標準モジュール」に貼り付ける

 

1.「開発」タブ ⇒ 「Visual Basic」を選択し、VBE(Visual Basic Editor)を起動する

※ Alt + F11 でも起動できます。

起動すると、以下のような真っ白な画面が出てきます!

 

2.「挿入」タブ ⇒ 「標準モジュール」を選択し、標準モジュールを挿入する

 

「Module 1」が追加されたことを確認しましょう。

 

3.下記コードをすべてコピーする

 

4.VBEの右のウィンドウに貼り付ける ⇒ 上書き保存

 

 

 

以上で、コードの貼り付けが完了しました!

これで8割方終わったといってもいいでしょう。

ですが、最後の手順までもう少しお付き合いください。

 

手順③:実行ボタンを設置

 

最後のひと手間を加えて、実行しやすい環境を整えていきましょう。

 

1.「開発」タブ ⇒ 「挿入」 ⇒ 「ボタン(フォームコントロール)」

画面の適当なところでクリックしてみると・・・

「マクロの登録」というウィンドウが開きます。

 

2.「複数ブックまとめる」 ⇒ 「OK」

ボタンにマクロの実行名を紐づける、といったことを行います。

 

 

お疲れさまでした!

このようなボタンが画面上に挿入されたら、完成です!(ボタンに表示されているテキストは、自由に変えても大丈夫です)

では次に「複数のエクセルファイルを1つのブックにまとめる(シート別)マクロの使い方」について解説していきます。

 

複数のエクセルファイルを1つのブックにまとめる(シート別)マクロの使い方

 

さて、ここまでは「複数のエクセルファイルを1つのブックにまとめる(シート別)マクロの導入手順」を解説しました。

ここからは実際の使い方をご説明してきます。

使い方はとてもシンプルですので、安心してくださいね!

 

フォームボタンを押して、ダイアログを開く

 

さきほど作成したExcelマクロファイルを開いた状態からスタートしましょう。

「ボタン1」を押しダイアログを開いてみましょう。

ボタンを押すと、上図のようなダイアログが開かれます。

複数のエクセルをひとつにまとめるため、エクセルが保存されている該当のフォルダに移動しましょう。

 

ダイアログから、複数のExcelブックを選択する

 

ダイアログから選択する方法はいくつかあります。

以下の4つから試してみてくださいね。

 

 複数のエクセルを選択するための4つの方法

■選択方法①:マウスドラッグで選択

■選択方法②:「左クリック」+「ctrl」で、エクセルを部分的に選択

■選択方法③:「左クリック」+「Shift」で、エクセルをまとめて選択

■選択方法④:「ctrl」+「A」で、すべてのエクセルを選択

 

以上が「複数のエクセルファイルを1つのブックにまとめるマクロ」の使い方になります。

 

ですが、1つのエクセルファイル内に大量の複数シートが挿入されることによって、シート間の移動がめんどくさくなりませんか?

たとえばシート数が100個くらいになると、そもそもどういった名前のシートが挿入されているのか把握しづらいし管理が大変になりますよね…。

1枚のシートに全シート分の目次などが一覧化されると便利なんですが…。

 

ということで、Excelで目次を自動生成する方法をマクロで解説しました。

こちらも実行ボタン一つだけで、ハイパーリンク付き目次を一括作成することができます!

これによって、複数シート間の移動がめちゃくちゃ楽になり、あなたの業務効率化をさらに加速させることが可能です。

>>Excelで目次を自動生成する方法は?ページ番号の振り方も解説!

 

複数のエクセルファイルを1つのブックにまとめる(シート別)マクロの解説!

 

さきほどは、Excelで複数のブックやシートをまとめるマクロの使い方をご紹介しました。

ここからは「マクロの使い方は分かったけど、マクロの解説もしてほしい!!」という方に向けて、コードの解説をしていきたいと思います。

といってもコード量も少ないですし、難しくはありません。

実は、たった2つのポイントを押さえるだけで、簡単に作成できるんですよ!

 

 「Excelで複数ブックやシートをまとめるマクロ」の2つのポイント

1.Application.GetOpenFilenameメソッドで、MultiSelect:=Trueにする

2.WorkSheets.Moveメソッドを使う

以上2つになります。

ということで、各ポイントを解説していきますね。

 

ポイント①:Application.GetOpenFilenameで、MultiSelect:=Trueにする

ポイント①となる部分は、2行目の以下コードです。

arrFileName = Application.GetOpenFilename(“Excelブック,*.xls?”, MultiSelect:=True)

 

以上のように記述すると、ダイアログから複数のブックを選択できるようになります。

こちらのコードについて、ひとつひとつ説明していきます。

 

■選択方法の指定

Application.GetOpenFilenameメソッドには、ブックを「ひとつだけ選択」または「複数選択」するか指定することができます。

具体的には、

  • ひとつだけ選択 ・・・ 記述を省略、またはMultiSelect:=FalseとすればOK
  • 複数選択    ・・・ MultiSelect:=TrueとすればOK

「True」か「False」にするだけですから、とてもシンプルですよね。

 

■変数の型

ただし、ダイアログで選択した複数ブックのパスを格納する「arrFileName」という変数は、「Variant」型としておく必要があります。

なぜかといいますと、Application.GetOpenFilenameメソッドで、複数ブックを選択した場合の戻り値は、「配列(Variant)」となるからですね。

 

■オブジェクトブラウザー
ちなみにオブジェクトブラウザーを確認すると、戻り値の部分に「(~~) as Variant」にはなっていません。

ですから、戻り値の型が分かりづらいんですよね。

その後、For Each In ~ Nextで、取得したブックのパス(配列)を1個ずつ処理していきます。

変数「Flag」にて、「1回目に開いたブック」、「2回目以降に開いたブック」かを判定する処理を入れています。

 

ポイント②:WorkSheets.Moveメソッドを使う

ポイント②となるのは、17行目の以下コードです。

wbTo.Worksheets.Move After:=wbFrm.Worksheets(wbFrm.Worksheets.Count)

以上のように記述してみましょう。

 

■ポイント②のコードを端的に説明すると

端的に表現するなら、

「2回目以降に開いたブックを、1回目に開いたブックに移動する」

ということになります。

■Worksheets.Moveメソッド

コード左側の、Worksheets.Moveメソッドは、「Worksheets(全シート).Move(移動する)」という風に読み替えて理解すればOKです。

そして今回のコードの意図としては、「2回目以降に開いたブックを1回目に開いたブックに移動する」ですよね。

ということはまず、「wbTo.Worksheets.Move」と書き込んでみましょう。

日本語で言い換えれば、「wbTo(2回目以降のブックの).worksheets(全シート).Move(移動する)」という意味になりますね。

 

■名前付き引数の指定

そして、名前つき引数※にて「Before」「After」のどちらに移動するかを指定しましょう。

※名前付き引数は、コロンイコールで記述します。(:=)

今回は、Afterとしてみましょう。

Afterの後に記述されているのは、「どこのブックの、どこのシートの前後に移動するか」というものになります。

つまり、

  • どこのブック・・・wbFrm【1回目に開いたブックの】
  • どこのシート・・・Worksheets(wbFrm.Worksheets.Count)【wbFrmの末尾のシートの】

 

と、言い換えることができます。

■シートの末尾の設定方法

ここでポイントになるのが、Worksheets(wbFrm.Worksheets.Count)としているところです。

つまり、2回目以降に開いたブックを、1回目に開いたブックへ移動すると、1回目に開いたブックのシート数が更新されてしまいますよね。

それを「Worksheetsコレクション.Countプロパティ」にて、1回目に開いたブックの現在の全シート数を毎回取得することで、末尾を指定することができます。

 

複数のエクセルファイルを1つのブックにまとめる(シート別)マクロのまとめ

 

今回は「複数のエクセルファイルを1つのブックにまとめる(シート別)マクロ」について解説しました。

今回のマクロでだいぶ業務効率化できると思うのですが…。

しかし、複数のエクセルファイルを1つのブックにまとめることによって、シート枚数が半端じゃない数になり、管理が大変になるといったデメリットもあるんですよね。

 

そこで、Excelで目次を自動生成する方法を解説していますので、こちらもマクロを使って解決しちゃいましょう。

>>Excelで目次を自動生成する方法は?ページ番号の振り方も解説!

 

今後もVBAに関するお役立ち情報を紹介していきたいと思いますので、お楽しみに!

今回は以上になります。最後までご覧いただきありがとうございました。

コメントを残す

メールアドレスが公開されることはありません。