Softex CelwareTech Blog
Excel VBA2026-10-28

複数シートの集計を名前定義と参照式で一覧化するExcel VBAの設計

VBAで集計一覧の行構成を作り、金額はシート単位の名前定義を参照する数式にします。行挿入への追従、シート名の引用、動的な一覧範囲と更新タイミングを解説します。

Excel VBA名前定義集計数式保守性

ひな形から作る詳細シートが増減するブックでは、一覧の行を作る処理と、各シートの合計を反映する処理を分けると保守しやすくなります。Excel VBAは一覧の構成を作り、金額の変更はExcelの数式で追従させます。

合計セルにシート単位の名前を付ける

詳細シートの合計セルにDetailTotalのような名前付き範囲を設定します。行挿入で合計セルが動いても、名前の参照先が追従するため、一覧側のセル番地を直す作業を減らせます。

ひな形を複製する場合は、名前のスコープがブック全体ではなく各シートになっていることを確認します。同名のローカル名とブック名が混在するブックでは、どちらを参照しているかも点検します。

値ではなく参照式を書き込む

Dim DetailSheet As Worksheet
Dim ReferenceFormula As String
Set DetailSheet = ThisWorkbook.Worksheets("Detail A")

ReferenceFormula = "='" & Replace(DetailSheet.Name, "'", "''") & "'!DetailTotal"
ThisWorkbook.Worksheets("Summary").Range("B2").Formula = ReferenceFormula

シート名は単一引用符で囲み、名前自体に含まれる単一引用符は二重にします。合計値をコピーする場合と違い、詳細シートの入力を直すと、一覧の数式も再計算されます。計算方法が手動の場合は、更新タイミングを別途管理します。

複数行は二次元配列へ式を組み立て、対象範囲へまとめて書けます。FormulaはA1形式、FormulaR1C1はR1C1形式です。行合計を=SUM(RC2:RC4)で作るなら後者を使い、式の形式を揃えます。項目名など外部入力の文字列は、数式として評価されないよう別列の文字列として扱います。

一覧自体の参照範囲も更新する

別シートが一覧を参照する場合は、一覧の現在行数に合わせて名前の範囲も更新します。表、項目列、金額列にそれぞれ名前を付けると、SUMIFSや検索式が行数の変化に追従できます。

=IFERROR(VLOOKUP(A2,SummaryTable,COLUMNS(SummaryTable),FALSE),0)

この式は検索列が表の左端、返したい列が右端にある前提です。項目名が重複する場合は先頭だけを返すため、分類との複合キーや重複検査を用意します。配布先が古いExcelなら、利用できる関数を確認してVLOOKUPやINDEX/MATCHを選びます。

作り直すタイミングと書式の扱いを決める

詳細シートを作成・削除した直後に一覧を作り直すと、シートを開くたびに処理するより更新箇所が明確です。手作業でシートを変更する運用なら、一覧の更新ボタンも用意します。

件数が減った場合は以前の出力を残さず、出力担当範囲だけClearContentsで消します。利用者が整えた罫線や列幅まで消さないようにします。合計名がないシートは黙って0と扱わず、不足している名前を知らせます。

確認するケース

詳細の金額変更、行挿入、詳細シートの追加・削除、引用符を含むシート名、一覧の0件・減少を確認します。数式が正しいだけでなく、名前のスコープと実際の参照先を名前の管理画面でも確認すると、参照違いを見つけやすくなります。

関連記事

この技術で業務改善しませんか?

Excel VBA・GAS・Webアプリで業務の自動化ツールを開発しています。 「こんなことできる?」というご相談だけでもお気軽にどうぞ。

無料相談はこちら →