複数のエクセルファイルを1つのブックにまとめるVBA【 設定方法を紹介】
複数のエクセルファイルを1つのブックにまとめたい。いい方法はないの?
こんな要望にお答えします。
この記事では、複数のエクセルファイルを1つのブックにまとめるVBAの導入方法、使い方、を詳しくご紹介しています。
VBA未経験の方でもスムーズに導入できるよう、実際のVBA導入画面を用いて解説を行っていますので是非最後までチェックしてみてください。
「複数のエクセルファイルを1つのブックにまとめるVBA」を導入することで以下のような問題を解決することができます。
- 毎日、別ブックのシートをコピペしている
- 職員全員の勤怠表の集計を手作業で行っている
- 単純なコピペ作業を何時間もかけて手作業で行っている
下記の動画では、「複数のエクセルファイルを1つのブックにまとめるVBA」がどのような処理をするのか!を動画でご紹介しています。
処理内容としては、指定したブックのシートをコピーして、1つのブックに集約するというものです。
VBAの操作方法は、まとめたいブックの場所を記入して実行ボタンを押下する!たったこれだけ。
処理のイメージとしてはこんな感じ
VBAの実行結果がこちら
エクセル操作が苦手な方でも簡単に扱える内容になっているので、誰でも感覚にVBAを利用することが可能です。
また下記のサイトでは、「複数のエクセルファイルを1つのブックにまとめるVBA」をダウンロードしてそのままお使い頂くことができます。
コードや設定方法やVBAの内容なんてどうでもいい。一刻も早く、VBAを使ってエクセル業務の効率をアップさせたい!
と考えている方は是非サイトを参考にしてみてください。
目次
複数のエクセルファイルを1つのブックにまとめるVBAの導入手順
複数のエクセルファイルを1つのブックにまとめるVBAの導入手順を詳しく説明していきます。
手順通り操作すればVBA未経験の方でもスムーズに導入することができるので是非挑戦してみてください。
手順① シートの設定
上図のように「設定」シートを作成します。
B3セル~B20セルの背景色を白、それ以外は黄色に設定
これは、ブックの場所を記載するセルがB3セル~B20セルであることをわかりやすくするためです。
今回はB3セル~B20セルの情報を読み取るコードにしていますが、業務内容に合わせて変更することも可能です。
次に、シートの名前を「設定」にしてください。
シートを区別するVBAが設定されているので、シート名を「設定」にしなければ正常に動作しません。
シート名が「設定」以外だと、次のようなエラーが表示されてしまいます。
シートを区別するVBAについてもっと詳しく知りたい!という方は、下記の記事を参考にしてください。
手順② VBAの作成
下記の手順に沿ってVBAの設定を行ってください。
VBA編集画面を開き、標準モジュールを作成する
「Module1」を選択し、コードを記入する
記入するコードは、下記のサンプルコードをコピペしてお使いください。
サンプルコード
Sub テスト()
Application.ScreenUpdating = False
Dim Abook As Workbook
Set Abook = ActiveWorkbook
Dim Ash As Worksheet
Set Ash = Abook.Worksheets("設定")
For k = 3 To 20
Dim exfile As String
If Ash.Cells(k, 2) = "" Then
Exit Sub
Else
exfile = Ash.Cells(k, 2)
End If
Workbooks.Open Filename:=exfile
If Err.Number > 0 Then
MsgBox "ファイルはすでに開かれています。"
Exit Sub
End If
Dim Bbook As Workbook
Set Bbook = ActiveWorkbook
For i = 1 To Bbook.Worksheets.Count
Bbook.Worksheets(i).Copy After:=Abook.ActiveSheet
Abook.ActiveSheet.Name = Abook.ActiveSheet.Name & "(" & Bbook.Name & ")"
Next i
Bbook.Close
Next k
End Sub
ポイントとなるコードの解説はのちほど解説を紹介しています。
手順③ 「実行ボタン」の作成
作成したVBAを簡単に利用できるようにするために「実行ボタン」を作成します。
ボタンの作成方法はめちゃくちゃ簡単なので是非挑戦してみてください。
ボタンの作成方法はこちら
「開発」→「挿入」→ボタン(フォームコントロール) を選択
「ボタン」に設定したマクロを登録
ボタン上で「右クリック」 → 「マクロの登録」 → 「テスト」 → 「OK」で、
先ほどVBAにコードをコピペして設定した「複数のエクセルファイルを1つにまとめるVBA」をボタンに設定することができます。
表示している「ボタン」のテキストを「実行」に変更する方法は、「ボタン」の上で、「右クリック」→「テキストの編集」でテキストを変更することが可能です。
これで全ての設定が完了です。
B3セル~B20セルに「ブックの保存場所」を記入し、ボタンを押下すればVBAが実行されて情報を集約することができます。
複数のエクセルファイルを1つのブックにまとめるVBAの使い方
「複数のエクセルファイルを1つのブックにまとめるVBA」の使い方をご紹介します。
使い方① ブックの保存場所を指定
上図のようにB3セル~B20セルに、集約したいシートが保存されているブックの保存場所を記入してください。
ブック名の右側に記載されている拡張子までしっかり記載することに注意が必要です。
使い方② 実行ボタンをクリック
使い方としてはたったこれだけ。
ブックの場所を記入 → 「実行」ボタンを押下
これならエクセルが苦手な方でも簡単に「複数のエクセルファイルを1つのブックにまとめるVBA」を利用することができるのではないでしょうか。
ちなみに、
仕事で大量のデータ(約50シート分)の集約を行ったときVBAの処理が完了するまで1分程度時間がかかってしまった
が問題なく集約することができました。
多くのブックを指定してVBAを実行する場合、処理が完了するまで気長に待つようにしてください。
複数のエクセルファイルを1つのブックにまとめるVBAの解説
複数のエクセルファイルを1つのブックにまとめるVBAは以下のような流れでプログラムが実行されます。
- 指定したブックを開く
- ブック内の全シートをコピー
- VBAが設定されているブックに貼り付け
- 指定したブックを閉じる
- 1~4の繰り返し
大きく分けて上記5つの項目で構成。
完成したVBAの動きを見ると複雑で難しいと感じるかもしれませんが、項目を分けて考えてみると複雑なVBAは一切使われていません。
複数のエクセルファイルを1つのブックにまとめるVBAに使われている主なVBAがこちら
- シートとブックを区別するVBA
- 指定したブックを開く・閉じるVBA
- ブック内の全シートをコピーし別のブックに貼り付けるVBA
これら3つのVBAを組み合わせることで「複数のエクセルファイルを1つのブックにまとめるVBA」が作られています。
シートとブックを区別するVBA
サンプルコードの中で、シートとブックを区別するVBAが使われている部分がこちら
Dim Abook As Workbook
Set Abook = ActiveWorkbook
Dim Ash As Worksheet
Set Ash = Abook.Worksheets("設定")
Dim Bbook As Workbook
Set Bbook = ActiveWorkbook
VBAが設定されているブックを「Abook」、「Abook」の「設定」シートを「Ash」、ブックの場所を指定して開いたブックを「Bbook」
という変数で宣言しています。
このような変数でブックやシートを区別することで、別ブックの別シートに情報を転記することが可能となります。
下記の記事では、別シートに情報を自動反映させるVBAの作り方を詳しく解説しています。
併せてチェックしてみてください。
指定したブックを開くVBA
サンプルコードの中で、指定したブックを開くVBAが使われている部分がこちら
For k = 3 To 20
Dim exfile As String
If Ash.Cells(k, 2) = "" Then
Exit Sub
Else
exfile = Ash.Cells(k, 2)
End If
Workbooks.Open Filename:=exfile
If Err.Number > 0 Then
MsgBox "ファイルはすでに開かれています。"
Exit Sub
1行目から7行目では、B3セルからB20セルに記入されたブックの場所を「exfile」という変数に格納。8行目で変数「exfile」を開く
というプログラムになっています。
開いていない別のブックを自動編集したい!ときによく利用されるVBAなので是非使い方をマスターしてみてください。
ブック内の全シートをコピーし別のブックに貼り付けるVBA
サンプルコードの中で、ブック内の全シートをコピーし別のブックに貼り付けるVBAが使われている部分がこちら
For i = 1 To Bbook.Worksheets.Count
Bbook.Worksheets(i).Copy After:=Abook.ActiveSheet
Abook.ActiveSheet.Name = Abook.ActiveSheet.Name & "(" & Bbook.Name & ")"
Next i
カウント関数で開いたブック(Bbook)のシート数をカウントし、For~Next(繰り返し処理)を使って1シートから最後のシートまでを繰り返す
というプログラムです。
開いたブックのシート数がわからなくても問題ありません。
シートの数量が変動しても自動的に対応できるのでいろんな業務に応用することが可能です。
カウント関数とFor~Next(繰り返し処理)の組み合わせはよく利用されるVBAなので是非使い方をマスターしてみてください。
【VBAの設定不要】複数のエクセルファイルを1つのブックにまとめるVBAをすぐに導入する方法
VBAの導入手順を見たけどよくわからない!ちょっとめんどくさい!
このように感じた方でも簡単に「複数のエクセルファイルを1つのブックにまとめるVBA」を手に入れる方法があります。
それは、下記のサイトで「複数のエクセルファイルを1つのブックにまとめるVBA」が設定されたエクセルファイルをダウンロードする!です。
難しい設定不要!コードのコピペ不要!で「複数のエクセルファイルを1つにまとめるVBA」を利用することができます。
業務内容に合わせてVBAをアレンジする方法
「複数のエクセルファイルを1つにまとめるVBA」は魅力的だけど、仕事で使えるかと言われると微妙。。
このように感じる方が多いのではないでしょうか。
例えば、、
- 複数のエクセルファイルをまとめた後、〇〇という処理まで行いたい
- 複数のエクセルファイルをまとめた後、ファイル名に「集約済み」と追記したい
- 複数のエクセルファイルをまとめた後、シート名の編集を自動化したい
このように「複数のエクセルファイルを1つにまとめるVBA」をベースに業務内容に合わせてアレンジできれば仕事でかなり使えるのに。。
こんな要望にお応えします。
業務内容に合ったVBAにアレンジする方法は、
マメBlogにVBA開発を依頼する!
です。
依頼方法はとても簡単で、「こんな作業をこんなように自動化したい!」というザックリした内容でもOK。
依頼者様の考える自動化処理をVBAを使って表現します。
「複数のエクセルファイルを1つにまとめるVBA」をベースにVBAをアレンジした事例として、以下のような依頼を受注したことがあります。
- 商品の売り上げ情報をまとめて合計を集計し印刷する
- 勤怠情報をまとめて働きすぎの社員に注意を促す通知を自動表示する
- 商品の数量情報をまとめて在庫が0のデータを削除、不良品のデータを赤字に編集する
「複数のエクセルファイルを1つにまとめるVBA」+「業務内容に合った処理をするVBA」を導入すれば、今まで何時間もかかっていた編集作業を一瞬で処理することが可能です。
業務内容に合わせてVBAを設定していくと「こんなこともできる?」「この処理の自動化も追加できる?」と内容がどんどん膨らんでいき
結果、VBAを実行したらほとんど何もせずに作業が完了してしまう!なんてことも!!
それくらいVBAはエクセル業務の効率アップに効果的ということですね。
エクセル業務のウェイトが大きくて思い通りに仕事が進まなくて困っている!という方は、マメBlogのVBA開発サービスの利用を検討してみてください。
ディスカッション
コメント一覧
まだ、コメントがありません