shikumika’s diary

日々の事務作業で手間なことを簡単にできる仕組み(自動化、方法など)、困ったことの解決方法を調べた備忘録

【Excel VBA】複数シートのデータを抽出して一つのシートにまとめる事例

ExcelのVBAで、複数シートのデータを抽出して一つのシートにまとめる事例の備忘録。前回、INDIRECT関数を活用して「複数シートのデータを抽出して一つにまとめる方法」を記載しました。この方法は、シートの枚数が多い場合や、繰り返しシートの更新がある場合などに手間なので、VBAを活用した方法です。

同一ファイル内のシートが対象で、VBA実行前に都度セル位置を選択して抽出するVBAサンプルです

内容:

サンプルの前提
  • 前回の事例で示したように、次のとおりExcelファイル内に、同じフォーマットで入力されたデータが複数枚あり、特定のセルの情報を抽出した一覧表を作成する。シートは新規に作成し、1行に1シートのデータとなるよう転記する。

    同一ファイル内に同じフォーマットのファイルが複数ある
  • VBAの汎用性を持たせるため、VBAを実行する前に対象となるシート、抽出したいセルを選択しておく。実行は「開発」タブのマクロの表示から実行(Alt+F8キーと同じ)。

    CTRLキー、SHIFTキー等を利用して対象のシート、セルを選択しておく

    VBA実行前の選択状態
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行となるリストが作成される。

テキストの値がリスト表示

VBAの実行結果のイメージ
事例の補足説明

対象となるシート複数選択する方法は次のとおり。

support.microsoft.com

連続していないセルを複数選択する場合も、Ctrl キーを押しながらセルをクリックすることで可能です。

 

以上、ExcelのVBAで、複数シートのデータを抽出して一つのシートにまとめる事例で、事前にセル選択をする方法でした。

抽出するセルの場所をExcelの「メモ」機能で指定し、複数ブックから抽出するVBAサンプルは以下です。

shikumika.org

複数ブックのデータ(単票)を一覧表にまとめる方法の比較

Excelで複数ブックのデータ(単票)を一覧表にまとめる方法にはいくつかの選択肢があるので以下に対応例をまとめました。

shikumika.org