The following two tabs change content below. VBA集計業務では、複数のブックから1つのブックへデータを集計する作業があります。本記事では、5つの開かれた複数のブックから順次データを取り出し、1つの取りまとめ用ブックへ集計するVBAサンプルコードをご紹介します。, まずは本記事でご紹介するサンプルファイルの内容と、実行ビフォアアフターが分かる1分動画をご確認ください。, まずは会計用データを収めたサンプルファイルを準備してください。サンプルファイルは、1つの取りまとめ用ブックと5つの部門別ブックの合計6ファイル(ブック)あります。またそれらのブックには、各1枚のワークシートがあります(下図)。, 5部門のレコードを1つのシートに集計させるVBAコードになります。それでは、「00 取りまとめ用.xlsx」に標準モジュールを追加して、以下のコードを真似して書いてください。また時間のない場合は、下のサンプルコードをコピペしてください。, 「00 取りまとめ用.xlsx」に標準モジュールを追加して、サンプルコードを転記した後は、いよいよVBAの実行になります。, 今回は、集計対象レコードをもつすべての部門別ブックを開いた状態で集計しますので、まだ開いていない場合は下記手順で部門別ブックを開いてください。, まず、Excel画面左上の「ファイル」メニューをクリックして、バックステージビュー(下図)を開きます。次に①の「開く」、② の「参照」をクリックすると、「ファイルを開く」画面が開きます。, そこで、図のように部門別ブックが保存されているフォルダから、5つの部門別ブックを複数選択(③)した上で、③の「開く」をクリックします。これで5つの部門別ブックが開きますので、開いているExcelブック数は、取りまとめ用と合わせて6個になります。, ここで注意いただきたいのですが、VBAコード実行前は上記6つのExcelブック以外は開いていない状態にしてください。, では、VBAコードを実行してみましょう。VBA実行後のサンプルファイルの結果は下のようになります。, 図は、最初に集計された人事部データですが、下までスクロールすると5つの部門のデータが集計されていますので、実際に確認してみてくださいね。, 7行目: Dim wbkSelf As Workbook, wstSelf As Worksheet, lngWRow As Long 取りまとめブック用の変数を宣言しています。「Dim wbkSelf as workbook」でワークブックオブジェクト変数を宣言しています。今回は、自ブック以外の複数のブックを扱いますので、個々のブックを管理するためにワークブックオブジェクト変数を使います。, また、ワークブックオブジェクトに続いて、取りまとめシート用に「wstSelf as worksheet」、取りまとめシートへ書き込む行番号を保持する「lngWRow as long」をそれぞれ宣言しています。, このように、VBAでは1つのDimに対して「,(カンマ)」を複数使う事で、1行に複数の変数を宣言することもできます。, 8行目: Dim wbkData As Workbook 9行目: Dim wstData As Worksheet, lngERow As Long 8行目は、部門別ブック用のワークブックオブジェクト変数を宣言しています。9行目は、各部のレコードが入力されているシート用のワークシートオブジェクト変数、レコードの最終行番号を保持する変数をそれぞれ宣言しています。, 18~21行目:With wstSelf ~ End With集計先の取りまとめ用シートをクリアして、書込み行変数「lngWRow」を取りまとめ用シートの2行目に初期化するVBAコードです。, 24~48行目: For Each wbkData In Workbooks ~ Next 取りまとめ用シートを含む開いているすべてのブックを繰り返し処理します。処理の内容については、次の図で詳しく説明をしますのでご覧ください。, まずは、大きな流れの説明をしますね。VBAコード24行目は、For Eachを使って、開いているすべてのブックを1つずつ繰り返し処理します。この時点では、図の赤枠で囲った、取りまとめ用ブックを含めた6つのブックが処理対象です。, そして、VBAコード26行目は、If文を使ってレコードが入力されている部門用ブックだけを処理対象に絞ります。図で言いますと、青枠内の5つの部門別ブックだけに処理対象を絞っています。ではその If文 内でどのような抽出条件を設定しているのかを次の図で見ていきましょう。, 前述の通り、VBAコード24行目では開いているすべてのブック(図の赤枠)が For Each 文の繰り返し処理の対象になります。そして、VBAコード26行目では、「.Name」、すなわち処理対象のブック名を取得し、than以降の処理をするかどうかを判定しています。, ブック名の条件判定式には、Like演算子を使いブック名に「取り」を含むものを抽出しています。それを、Not(論理演算子)で反対の条件にしています。まとめると、VBAコード26行目では「ブック名に「取り」を含まないブックをThen以降で処理する」という意味になり、結果的に5つの部門別ブックだけがThen以降で処理されることになります。, ここからVBAコード26行目で条件を満たした5つの部門別ブックの処理内容の解説になります。, 27行目: Set wstData = .Worksheets(1) 各部門別ブックの1シート目を、ワークシートオブジェクト変数「wstData」に設定しています。, ここで「.Worksheets」は、VBAコード25行目のwbkDataのプロパティになります。.Worksheets(1)でwbkDataのワークシートの先頭から1つ目のワークシートを指定する書き方になります。, VBAでは、このワークシートを数字で指定する方法をIndexで指定するといいますが、具体的には、下図のようにExcelシートの先頭のワークシートから順番に数字で指定する方法です。, このIndexによる指定方法は、ワークシート名を指定してワークシートオブジェクト変数を設定する方法に対して、数字だけを使いますので簡単に定義できるのですが、意図せずワークシートの順番を変えられてしまうと、エラーや正しく集計がされませんので注意が必要です。, 今回の各部門のファイルは、すべて1枚のシート構成ですので、wbkData.Worksheets(1)により、集計対象レコードが入力された1枚目のシートがワークシートオブジェクト変数「wsdData」に設定されます。, 29~45行目:With wstData ~ End With各部門の処理対象シート「wstData」から、すべてのレコードを取りまとめファイルに転記するVBAコードです。このあたりのVBAコードのアルゴリズムは、同一ブック内で複数のワークシートのデータを集計する方法と考え方は同じですので、次図で簡単に解説しますね。, 青枠は、各部門ごとに処理されるVBAコードです。まず、VBAコード30行目で各部レコードの最終行番号を取得します。, 32~44行目:For r=2 to lngERow ~ Next各部門の1つのレコードに対する処理内容です。各部シートの2行目から、VBAコード30行目で取得済みのレコード最終行番号まで、この中で1つずつレコード単位で処理されます。, VBAコード33~41行目で、各部門の1つのレコードの持つ各データを、取りまとめシートの対応する書込み行lngWRowへ、対応する項目ごとに転記します。, この中でVBAコード37行目(赤字)では、取りまとめファイルの「部門」項目へ転記するデータとして、処理中の部門シートのワークシート名を取得しています。, 集計対象のレコードが複数の別ブックにあり、さらにすべてのブックを開いた状態で取りまとめ用ブックに集計させるVBAサンプルコードをご紹介しました。今回のように集計対象のブックが5個くらいで、ブックの容量が重くない複数ブックの集計では、すべてのブックを開いて集計するのも1つの方法です。, 一方、集計対象のブックが数十個あり、また保存先のフォルダが複数ある場合は、すべてのブックを開いてから集計するのは非効率です。, この場合は、FSO(File System Object)やDir関数などを使ったフォルダ操作を使い、ブックを1つずつ開いて、データを読み取り、閉じるという繰り返し処理をしながらデータを集計する方法が一般的ですが、FSOやフォルダ操作の関数などの新たな知識が必要になります。, その点、今回の手法はこれまでの集計スキルの範囲内で、複数の別ブックにあるデータを集計できますので、ブック数が少ない場合は簡単に応用できるサンプルコードとしてご利用頂けます。. どうも、taka(@takabou63)です(^^♪ さて、皆さんは他のBookのマクロを実行したいと思ったことは有りますか? その様な時に使用するのが『Runメソッド』です、今回は『別のBookのマクロを実行「Runメソッド」』についてご紹介します! ExcelWork.info , エクセルVBAでよく使うコードの備忘録。VBAで別のエクセルワークブックのマクロを実行するコード。, 別ブックのマクロを実行するには、ApplicationオブジェクトのRunメソッドを使用します。Runメソッドの引数として、ブックのパスと実行したいマクロ名をつなげて以下のような書式で渡します。, 実行したいマクロが含まれるワークブックがすでに開いているのであれば、そのまま実行されます。もし開いていなければ、新たにワークブックが開いたうえでマクロが実行されます。ちなみに、すでにワークブックが開かれている場合は、パスではなくファイル名を引数として渡すだけでマクロが実行できます(ファイル名なしでも可能ですが、お勧めできません)。, 実際に別ブックのマクロを使用するコードを書く際は、別ブックのマクロを実行した後はそのブックは閉じることになると思います(不要なので)。下記のサンプルコードでは、まずマクロを実行したいエクセルブックを開き(ワークブックオブジェクトを取得)、その上でRunメソッドを使用してマクロを実行しています。こうすることにより、実行後は使用済みのワークブックを簡単に閉じられるようにしてあります。, なお、コードを使用する際はカッコに囲まれた部分([***])を自分のプログラムに合わせて変更してください。, ちなみに、マクロのコードにパスワードがかかっていて中が見られない場合でも、実行したいマクロ名がわかれば実行は可能です。, エクセルVBAで使うコードの備忘録。VBAで「#DIV/0!」などのエラー値を意図的に生成する値として設定したりするためのコード。CVErr関数を使って取得することができます。, エクセルVBAで使うコードの備忘録。VBAで指定フォルダ内のすべてのファイル名を取得するコード。Dir関数を使ってフォルダ内のファイルを順に取得すると、ファイルシステムオブジェクトを使う方法を紹介します。, エクセルVBAで使うコードの備忘録。VBAでエクセルのワークシートの処理をする際に、画面更新を一時的に停止する方法について。Selectなどで画面を頻繁に切り替えるコードを書いていたり、する場合は、画面の更新を停止することにより処理速度が劇的に改善する場合があるので、試してみて時間を無駄にしないようにしましょう。, エクセルVBAで使うコードの備忘録。VBAでワードファイルを操作して、シェイプオブジェクト内の文字列を置換するコード。今回は本文内ではなく、ヘッダーやフッター内に配置されたシェイプオブジェクトのテキストを置換します。, エクセルVBAで使うコードの備忘録。VBAで指定フォルダ内に存在するフォルダ一覧を取得するコード。ファイルシステムオブジェクトを利用して簡単に取得できます。, エクセルVBAで使用するコードの備忘録。選択されたセルの参照関係(トレース矢印)を自動で表示するコード。. 開かれている複数のブック上のデータを、1つの取りまとめ用ファイルに集計させるvbaサンプルコードを紹介します。集計対象の複数ブックすべてを簡単に開ける場合、本記事でご紹介するサンプルコード … あることがキッカケでVBAを独学で勉強しました、今ではブログを通してVBAでできることを解説しつつ、VBAや他の言語の勉強、ブログ運営の勉強をしています(^^♪. OS:Windows XPOffice:2003複数のエクセルブックを開いている状態で、ある任意のブックをアクティブにしてセルの操作(コピペなど)をしたいのですが、"インデックスが有効範囲にありません"とエラーになってしまいます。現在のソースは、 他のブック中にあるプロシージャー(Sub,Function)を実行する場合は、Application.Runメソッドを使います。別々に作成されたマクロVBAの入ったブックを連携させる時には必須になります。Application.Runメソッド マクロの実行または関数の呼び出しを行います。 …, PrintCommunication プロパティ PrintCommunicat …, 分割したウィンドウ 「ウィンドウ枠の固定」や「ウィンドウの分割」での、すべての領 …. 別ブックのマクロを実行(すでにブックが開いている場合) Call Application.Run("[ワークブック名]! Application.Run(Macro, Arg1, Arg2, Arg3, ・・・, Arg30). Excelマクロを実行する方法は、4つあります。 その4つの方法について解説します。 目次1 Excelマクロが入っているファイルを開く2 Excelマクロ実行上の注意点3 マクロの実行方法 Excelマク […] ©Copyright2020 E-VBA.All Rights Reserved. Copyright© たくさんのファイルに同じ処理をする面倒な処理はマクロで自動化すると便利複数のファイルに対してある決まった処理を繰り返し行わないといけないことはよくあると思います。ファイル数が多いと結構時間と手間がかかって面倒になってきますよね? 各ブック上での処理マクロ自体は動作が完了しており、個別のブックに直接マクロを記述し実行すると問題なくcsvが生成されてくれるのですが、複数ブックに対し…の方がうまくいきません。 解決についてご教授頂ける方、ぜひご回答頂けましたら幸いです。 [マクロ名]") サンプルコード. ブックを問わず、共通して使用しているマクロがある場合は、個人用マクロブックの利用がオススメです。この記事では、個人用マクロブックの作成方法や使用上の注意点について解説しています。 同時に実行するには二つ目のExcel を以下の通り実行します。(一つ目のExcel は通常起動と同じ) 別メモリでの実行方法. 別のブックのマクロを実行するには、Run メソッド を使用します。 ( ※ 参照設定を行うと、Call ステートメント でも 別ブックのマクロを呼び出すことができます。 詳細は、プロシージャを呼び出す(Call ステートメント を参照してください。 別ブックのマクロを実行(すでにブックが開いている場合) Call Application.Run("[ワークブック名]! 別のブックのマクロを実行するには、Run メソッド を使用します。( ※ 参照設定を行うと、Call ステートメント でも 別ブックのマクロを呼び出すことができます。詳細は、プロシージャを呼び出す(Call ステートメント を参照してください。), object.Run ( macro [, arg1, arg2, … , arg29, arg30 ] ), - ブック・シートの操作 Application オブジェクト, Call ステートメント, Run メソッド, VBA基本, エクセルVBA, ブック・シートの操作, 次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。, このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。, SaveAs メソッド ワークシートを名前を付けてファイルに保存します。Work …, PageSetup.PrintTitleRows プロパティ PageSetup …, DefaultSaveFormat プロパティ DefaultSaveForma …, PageSetup.FirstPageNumber プロパティ PageSetu …, ブックが共有モードか確認する(MultiUserEditing プロパティ) 共 …, DisplayFullScreen プロパティ DisplayFullScree …, Protect メソッド・Unprotect メソッド Protect メソッド …, PageSetup.BlackAndWhite プロパティ PageSetup. 今回紹介するVBA(マクロ)の内容VBA(マクロ)では複数のブック(Excelファイル)に対して繰り返し作業を行うこともできます。今回紹介するコードは私が初めてネットで調べたコードを加工して作ったもので「一つのフォルダにあるファイルを順に開 2015 All Rights Reserved. 印刷のタイトル行、タイトル列を設定(PrintTitleRows,PrintTitleColumns), ファイル保存の既定の形式を取得・設定(DefaultSaveFormat プロパティ), 印刷の先頭のページ番号を設定(PageSetup.FirstPageNumber プロパティ), シートを保護・保護したシートを解除する(Protect メソッド・Unprotect メソッド), 保存時にバックアップファイルが作成されるかどうかを確認(CreateBackup プロパティ), macro  ・・・  実行するマクロを指定します。ブックが開いている時やカレントフォルダのブックの場合は、「. 開かれている複数のブック上のデータを、1つの取りまとめ用ファイルに集計させるvbaサンプルコードを紹介します。集計対象の複数ブックすべてを簡単に開ける場合、本記事でご紹介するサンプルコード … タスクバーの「Excel」を右クリックして、「Excel 2016」を選択します。 これで複数のマクロの同時実行が可能です。 エクセルVBAでよく使うコードの備忘録。VBAで別のエクセルワークブックのマクロを実行するコード。, 別ブックのマクロを実行するには、ApplicationオブジェクトのRunメソッドを使用します。Runメソッドの引数として、ブックのパスと実行したいマクロ名をつなげて以下のような書式で渡します。, 実行したいマクロが含まれるワークブックがすでに開いているのであれば、そのまま実行されます。もし開いていなければ、新たにワークブックが開いたうえでマクロが実行されます。ちなみに、すでにワークブックが開かれている場合は、パスではなくファイル名を引数として渡すだけでマクロが実行できます(ファイル名なしでも可能ですが、お勧めできません)。, 実際に別ブックのマクロを使用するコードを書く際は、別ブックのマクロを実行した後はそのブックは閉じることになると思います(不要なので)。下記のサンプルコードでは、まずマクロを実行したいエクセルブックを開き(ワークブックオブジェクトを取得)、その上でRunメソッドを使用してマクロを実行しています。こうすることにより、実行後は使用済みのワークブックを簡単に閉じられるようにしてあります。, なお、コードを使用する際はカッコに囲まれた部分([***])を自分のプログラムに合わせて変更してください。, ちなみに、マクロのコードにパスワードがかかっていて中が見られない場合でも、実行したいマクロ名がわかれば実行は可能です。, エクセルVBAで使うコードの備忘録。VBAでパワーポイントファイルを操作して、スライド内のシェイプオブジェクトを調整するコード。, エクセルVBAで使うコードの備忘録。VBAでワークブックの自動計算設定を切り替える方法について。, エクセルVBAで使うコードの備忘録。ワークシートの内容を消去する関数について。内容すべてを消去するものから、値だけ、コメントだけ、書式だけ、といった風に細かく消去対象を選択可能です。, エクセルVBAで使うコードの備忘録。VBAでパワーポイントファイルを操作して、スライドマスター内の指定した文字列を置換するコード。, エクセルVBAで使うコードの備忘録。エクセルのワークシート上で使用できる関数をVBAのコードから直接呼び出して使用するコード。, エクセルVBAで使用するコードの備忘録。VBAでWordファイルを操作しファイル内の表の体裁(フォント、高さ、背景色など)を変更するコード。ExcelからWordファイルに表を貼り付けた場合などには、表の幅などの体裁が崩れるケースが多いので、そのような場合にはVBAから体裁を整える必要が出てきます。. 記事をうまくカテゴリー分け出来ていない事が多いので、↓下の記事検索で、キーワード検索してください。, Excel95? マクロシートがあった頃からExcelVBAを独学で利用しています。Excelによる日々のルーチンワークは、Excel VBA の組み込みにより作業時間短縮と作業ミスを減らすことが可能になります。作業時間の短縮により、他の仕事ができるため、業務効率がアップします。, Excel×Python最速仕事術 [ 金宏 和實 ]価格:2398円(税込、送料無料) (2020/1/13時点), 退屈なことはPythonにやらせよう ノンプログラマーにもできる自動化処理プログラミング [ Al Sweigart ]価格:4070円(税込、送料無料) (2020/1/13時点), できるUiPath 実践RPA [ 清水理史 ]価格:2200円(税込、送料無料) (2020/1/13時点), Excelで利益計画を立てましょう!会社にいくらの利益が必要で、その為の売上高は?, このExcel VBA ノートは、プログラムを再利用したり、コピペで入力の手間を省く為に作ったネット上のノートです。, これを実行するのに、Macro1を実行して、次に、Macro2を実行して、Macro3を実行して・・・とやる必要はありません。, とっても簡単なマクロですが、後に、様々な処理のマクロを組み合わせて作成する為の基本となります。, 次のように、Macro名を自由に決めて、Sub マクロ名() ~ End Sub の間に、続けて実行したいマクロ名を Call してあげます。ここでは、「Macroの統合」というマクロ名にしました。, 「Macroの統合」マクロを実行すれば、Macro1, Macro2, Macro3 が続けて実行されます。簡単ですね。, Call は次のように省略できますが、Call が付いている事で、他のマクロを呼び出していることが視覚的に分かりやすくなりますし、他のマクロを呼び出している箇所を 「Call」をキーワードに検索する事もできるようになりますので、省略しない方が良いです。, マクロを分割して作成しておくと、各マクロの実行順序が変わった場合にも変更が簡単です。, Excel VBA教室 4 複数のマクロを続けて実行する(マクロを組み合わせて一つのマクロを作る), 退屈なことはPythonにやらせよう ノンプログラマーにもできる自動化処理プログラミング [ Al Sweigart ].