ExcelのVBAで、複数シートのデータを抽出して一つのシートにまとめる事例の備忘録。前回、INDIRECT関数を活用して「複数シートのデータを抽出して一つにまとめる方法」を記載しました。この方法は、シートの枚数が多い場合や、繰り返しシートの更新がある場合などに手間なので、VBAを活用した方法です。
同一ファイル内のシートが対象で、VBA実行前に都度セル位置を選択して抽出するVBAサンプルです。
内容:
サンプルの前提
- 前回の事例で示したように、次のとおりExcelファイル内に、同じフォーマットで入力されたデータが複数枚あり、特定のセルの情報を抽出した一覧表を作成する。シートは新規に作成し、1行に1シートのデータとなるよう転記する。
- VBAの汎用性を持たせるため、VBAを実行する前に対象となるシート、抽出したいセルを選択しておく。実行は「開発」タブのマクロの表示から実行(Alt+F8キーと同じ)。
VBAサンプル
Option Explicit Sub 複数シートのデータを事前選択してリスト化() Dim 選択シート As Sheets Dim シート As Worksheet Dim データ出力シート As Worksheet Dim 選択セル As Range Dim 出力セル As Range Dim 行 As Long, 列 As Long Set 選択シート = ActiveWindow.selectedSheets '新規シートの追加' Worksheets.Add.Move before:=Worksheets(1) Set データ出力シート = ActiveSheet 'データの転記' 行 = 0 For Each シート In 選択シート 行 = 行 + 1 列 = 1 シート.Activate Set 選択セル = ActiveWindow.RangeSelection データ出力シート.Cells(行, 1) = シート.Name For Each 出力セル In 選択セル 列 = 列 + 1 データ出力シート.Cells(行, 列) = 出力セル.Value Next 出力セル Next シート データ出力シート.Activate End Sub
VBAの実行結果の例
上記実行すると、次のように選択したシート単位で、選択したセルが1行となるリストが作成される。
事例の補足説明
対象となるシート複数選択する方法は次のとおり。
連続していないセルを複数選択する場合も、Ctrl キーを押しながらセルをクリックすることで可能です。
以上、ExcelのVBAで、複数シートのデータを抽出して一つのシートにまとめる事例で、事前にセル選択をする方法でした。
抽出するセルの場所をExcelの「メモ」機能で指定し、複数ブックから抽出するVBAサンプルは以下です。
複数ブックのデータ(単票)を一覧表にまとめる方法の比較
Excelで複数ブックのデータ(単票)を一覧表にまとめる方法にはいくつかの選択肢があるので以下に対応例をまとめました。