VBA業務マクロの関数命名をレイヤーと責務で設計する
モジュール名を業務上の住所にし、関数名で対象物と仕事を読めるようにする
Copyright © 2026 LWP 山中 一弘
本資料は、出典を明記いただければ、商用・非商用を問わず、ご自由に複製・改変・再配布していただけます。なお、著作権表示は改変せず、そのまま記載してご利用くださいますようお願いいたします。
記事要約
VBA業務マクロの関数名は、英語としてきれいに見えることだけを目的にしても足りません。業務マクロでは、ボタン、シート、表、CSV、出力帳票、業務判断、金額計算、ログ出力が近い距離で混ざります。そのため、関数名を見ただけで「どの業務領域に属し、どのレイヤーで、何を対象に、何をするのか」が分からないと、保守時にコード全体の地図を失います。
この記事では、VBA業務マクロの命名を、モジュール名と関数名の組み合わせとして整理します。モジュール名は業務上の住所です。関数名は、3文字接頭辞でレイヤーを示し、対象物と動作名詞で処理内容を示します。Public関数は外から見ても一意にし、Private関数はモジュール文脈を使って短くします。
結論は単純です。業務マクロの命名は、見た目の統一ではなく設計情報です。関数名には、処理の居場所、対象、副作用、呼び出し範囲を表す責任があります。命名を整えると、関数一覧、コールツリー、モジュール構成、改修影響を追いやすくなり、業務マクロを引き継げる資産にできます。
本記事の対象とゴール
想定読者
Excel VBAで業務マクロを作っている人
Main、処理1、データチェック のような名前が増えて、後から読みづらくなっている人
Public関数とPrivate関数の名前の粒度を分けたい人
業務ロジック、データ操作、共通関数、計算関数の置き場所を整理したい人
既存マクロを改修するとき、いきなり全関数を変えずに命名規約を導入したい人
本記事で得られること
VBA業務マクロで、関数名に何を含めるべきか判断できます。
UIF、BIZ、DAT、MTH、COM などの3文字接頭辞を、レイヤーと責務の表示として使えます。
モジュール名と関数名を組み合わせて、長すぎないが意味が欠けない名前を付けられます。
Public関数はプロジェクト内で一意にし、Private関数はモジュール内の文脈で短くする判断軸を持てます。
既存マクロへ命名規約を入れるときの改修順序を決められます。
1. 命名規約は業務マクロの地図である
業務マクロの命名で重要なのは、英語として自然か、日本語として読みやすいか、型が分かるかだけではありません。
もちろん、構文上使える名前であること、読みづらい省略を避けること、組み込み関数やExcelオブジェクト名と衝突しないことは必要です。しかし、それだけでは業務マクロの保守には足りません。
業務マクロで本当に知りたいのは、次のような情報です。
その処理はどの業務領域に属するのか。
どのレイヤーの処理なのか。
何を対象にしているのか。
何を行う処理なのか。
読むだけなのか、書き換えるのか。
どのモジュールに置くべきなのか。
外部から呼ばれる処理なのか、内部補助処理なのか。
この情報が名前から読めないと、関数一覧を見ても地図になりません。マクロを修正するたびに、呼び出し元を探し、シート操作を追い、同じような処理を何度も読むことになります。
この記事で採用する基本思想は次のとおりです。
モジュール名 = 業務上の住所3文字接頭辞 = レイヤー対象物 = 操作対象または業務対象動作名詞 = その処理の仕事関数名だけで全部を語らせようとすると、名前が長くなりすぎます。反対に、モジュール名だけに意味を押し込めると、関数一覧を見たときに処理内容が分かりません。そこで、モジュール名と関数名を組み合わせて意味を作ります。
2. 関数名には分類と動作を持たせる
構造化言語における関数名は、単なる処理名では不足します。
関数名には、少なくとも次の2つの情報を持たせます。
1. その関数がどこに属するか2. その関数が何を対象に、何をするかこれは、二名法的な命名と、オブジェクト指向的な命名を組み合わせる考え方です。
二名法的な命名とは、関数がどの分類や領域に属するかを示す考え方です。たとえば、次の名前はまだ動作ではありませんが、分類としては意味を持っています。
sales_recordbilling_amountjournal_entrysheet_headerfile_pathmatch_resultここに動詞を足すと、処理名になります。
sales_record_validatebilling_amount_calculatejournal_entry_createsheet_header_findfile_path_joinmatch_result_compare一方、オブジェクト指向では、対象物に対してメソッドを呼びます。
File.ExistsPath.JoinSheet.ClearTable.FindColumnRange.GetValueVBAの標準モジュール中心の構造では、これを関数名に埋め込む必要があります。
file_exists_checkpath_joinsheet_cleartable_column_findrange_value_getしたがって、構造化言語の関数名は、分類、対象物、動作を組み合わせて考えます。
分類 + 対象物 + 動作上位層では、どの業務処理かを重視します。中位層では、どの業務対象に対する判断や加工かを重視します。下位層では、どの技術対象に対する操作かを重視します。
この違いを意識しないと、すべての関数名が「データ処理」「チェック」「実行」のような弱い名前に寄っていきます。
3. 日本語関数名の基本形
日本語の関数名では、英語の動詞に相当する部分が、動作名詞になります。
代表的な動作名詞は次のとおりです。
チェック検証判定計算算出作成生成読込保存保管出力取得設定変換整形記録確定日本語関数名の基本形は次のとおりです。
3文字接頭辞 + 業務分類 + 対象物 + 動作名詞例を挙げます。
UIF入力データチェックBIZ入力データ検証BIZ対象行判定BIZ加工データ作成DAT元データ読込DAT加工データ保存MTH金額丸めCOM空白判定MTDシート最終行取得UTL処理時間計測業務分類は、モジュール名で明らかであれば省略してかまいません。ただし、対象物と動作名詞は原則として省略しません。
たとえば、LWP_3010BIZ_売上取込 というモジュール内であれば、BIZ売上取込入力データ検証 と毎回書く必要はありません。Private関数なら、BIZ入力データ検証 や BIZ必須見出し検証 で足ります。
ただし、Public関数は別です。Public関数はモジュール外から呼ばれるため、関数名単体で意味が通り、プロジェクト内で一意になる名前にします。
4. 3文字接頭辞でレイヤーを示す
3文字接頭辞は、関数のレイヤーまたは役割を示します。接頭辞はすべて大文字にします。
| 接頭辞 | 役割 | 内容 |
|---|---|---|
| DCL | 共通定義 | 定数、列挙型、共通設定値 |
| UIF | ユーザーIF | ボタン呼出し、画面入口、トップレベル制御 |
| UBZ | UIF下請け | UIFを分割した補助処理 |
| EVT | イベント | Worksheet、Workbook、UserFormなどのイベント |
| BIZ | 業務ロジック | 検証、判定、業務計算、業務加工 |
| DAT | データモデル | 読込、保存、入出力、表変換、テーブル操作 |
| MTH | 計算系関数 | 金額、比率、丸め、日数などの純計算 |
| COM | 汎用関数 | 業務に依存しない共通処理 |
| MTD | メソッド風関数 | シート、範囲、配列など対象物を操作する関数 |
| TOL | 独立ツール | 単独実行する開発・保守用ツール |
| UTL | 支援関数 | 開発、検証、解析、ログ、計測 |
| CFG | 構成情報 | 関数一覧、構成メモ、変更履歴、設計情報 |
この表は、絶対的な正解ではありません。大切なのは、プロジェクト内で接頭辞の意味を固定することです。
補足しておくと、DCL と CFG は、実行処理というより、定義や構成情報の置き場所として使うことが多くなります。通常の業務処理を何でも DCL や CFG に入れないようにします。
また、COM はこの規約では Common、つまり汎用処理の意味です。WindowsのCOM技術と紛らわしい現場では、CMM など別の接頭辞へ置き換えてもかまいません。名前は規約を守るためにあるのではなく、誤解を減らすためにあります。
5. 標準モジュールは業務上の住所として使う
標準モジュールは、機能や役割ごとに分割します。
モジュール名は、次の形式を基本にします。
LWP_番号_機能区分業務機能ごとに分ける場合は、末尾に業務名を付けます。
LWP_3010BIZ_売上取込LWP_4010DAT_請求作成標準構成は次のように整理できます。
LWP_1010DCL DCL - 定数、列挙型、共通設定値LWP_2010UIF UIF - ユーザーIF、ボタン呼出し、上位制御 UBZ - UIF分割、UIF下請け EVT - イベント関数LWP_3010BIZ BIZ - 業務ロジック、検証、判定、業務計算、業務加工LWP_4010DAT DAT - データモデル、入出力、表変換、シート・テーブル・配列操作LWP_5010COM COM - 再利用可能な汎用関数 MTD - 操作対象を指定したメソッド風関数 MTH - 数値・金額・日付などの計算系関数LWP_6010UTL TOL - 独立したツール関数 UTL - 開発、検証、解析支援関数LWP_9010CFG CFG - 構成情報、関数一覧、設計メモ、変更履歴番号を付ける理由は、VBE上の並び順を安定させるためです。業務マクロでは、標準モジュールが増えるほど、どこから読めばよいか分かりにくくなります。番号によって、おおまかなレイヤー順で並べます。
ただし、番号は設計の本体ではありません。番号だけ整っていても、中の関数が混ざっていれば意味がありません。番号、機能区分、接頭辞、関数名が同じ方向を向いて初めて、モジュール構成が地図になります。
6. モジュール名と関数名を合わせて意味を作る
関数名が長くなりすぎる場合は、業務分類をモジュール名に逃がします。
たとえば、完全名をそのまま書くと、次のように長くなります。
BIZ売上取込入力データ必須見出し項目検証これは意味は分かりますが、長すぎます。読み手が毎回この長さを追うのは現実的ではありません。
この場合は、モジュール名に業務分類を持たせます。
LWP_3010BIZ_売上取込その中で、Private関数は次のように短くします。
Private Function BIZ必須見出し検証() As BooleanEnd FunctionPrivate Function BIZ入力行検証() As BooleanEnd FunctionPrivate Function BIZ対象行判定() As BooleanEnd Function意味上は次のように読みます。
売上取込の必須見出し検証売上取込の入力行検証売上取込の対象行判定つまり、モジュール名と関数名を合わせて意味が決まります。
意味上の完全名 = モジュール名 + 関数名ただし、VBAでは標準モジュールが強い名前空間ではありません。Public関数については、関数名単体でもプロジェクト内で一意になるようにします。
実装上の安全名 = Public関数名単体でも一意ここを曖昧にすると、別モジュールに同じPublic名がある、Application.Runで呼びづらい、ボタン割当でどれを指しているか分からない、といった問題が起きます。
7. Public関数とPrivate関数は粒度を変える
VBAでは、標準モジュール内のPublic関数は広い範囲から参照されます。そのため、Public関数とPrivate関数では命名規則を分けます。
Public関数では、次を重視します。
プロジェクト内で一意にする。
業務分類を省略しすぎない。
ボタン割当、Application.Run、外部呼出しに耐える名前にする。
関数名単体を見ても、何の入口か分かるようにする。
Private関数では、次を重視します。
モジュール内で一意ならよい。
業務分類はモジュール名に逃がしてよい。
関数名は短くしてよい。
モジュールの責務から外れる名前を付けない。
たとえば、売上取込の業務ロジックでは次のように分けます。
' Module: LWP_3010BIZ_売上取込Public Function BIZ売上取込入力データ検証() As BooleanEnd FunctionPrivate Function BIZ必須見出し検証() As BooleanEnd FunctionPrivate Function BIZ対象行判定() As BooleanEnd FunctionUIFの場合は、利用者が実行する入口と、その下請けを分けます。
' Module: LWP_2010UIF_売上取込Public Sub UIF売上取込入力データチェック()End SubPrivate Sub UBZチェック条件取得()End SubPrivate Sub UBZ結果メッセージ表示()End SubUIF は利用者やボタンに近い入口です。UBZ はUIFを分割した下請けです。UBZ をPublicにして外から呼ぶようになっているなら、それは本当にUI補助なのか、BIZへ移すべきなのかを見直します。
8. DAT、MTH、BIZの境界を決める
DAT と MTH は混同しやすい接頭辞です。さらに、業務ルールを含む計算は BIZ に寄せる必要があります。
判断基準は次のとおりです。
| 内容 | 接頭辞 |
|---|---|
| シート、CSV、テーブル、配列、辞書、行、列、入出力 | DAT |
| 金額、率、日数、丸め、差分、比率 | MTH |
| 締対象、請求対象、除外条件、業務ルールを含む計算 | BIZ |
例を見ます。
DAT元データ読込DAT入力表To加工表変換DAT加工データ保存MTH金額丸めMTH税額計算MTH比率算出MTH経過日数計算BIZ請求金額計算BIZ締対象判定BIZ入力データ検証同じ「計算」でも、業務ルールを含むなら BIZ です。単なる数式処理であれば MTH です。
たとえば、消費税額を四捨五入するだけなら MTH税額丸め で足ります。しかし、請求対象の明細だけを集め、取引先ごとの端数処理ルールを適用し、締日条件を見て請求金額を決めるなら、これは BIZ請求金額計算 です。
DAT は、データの入出力や変換を扱います。BIZ の判断を DAT に混ぜると、どこで業務ルールが変わったのか追いにくくなります。反対に、単なるシート読込を BIZ に置くと、業務ロジックがExcel操作に引きずられます。
9. 状態語でデータの段階を表す
業務マクロでは、データがどの状態にあるかが重要です。そのため、対象物には状態語を積極的に使います。
| 状態語 | 意味 |
|---|---|
| 元データ | 外部から取得した加工前データ |
| 入力データ | 処理対象として受け取ったデータ |
| 検証済データ | 検証を通過したデータ |
| 加工データ | 業務処理により加工されたデータ |
| 出力データ | 外部出力用に整えたデータ |
| 確定データ | 業務上確定したデータ |
| 保管データ | 後で参照するために残すデータ |
| エラーデータ | 検証エラーや処理エラーを含むデータ |
例を挙げます。
DAT元データ読込BIZ入力データ検証BIZ検証済データ作成BIZ加工データ作成DAT加工データ保存DAT出力データ書出DATエラーデータ出力データ という語だけでは、どの段階のデータか分かりません。元データ、入力データ、検証済データ、加工データ のように段階を分けると、処理の流れが読みやすくなります。
状態語を使う目的は、名前を長くすることではありません。処理の前後関係を見えるようにすることです。状態語があると、検証前のデータを保存していないか、加工済みデータを再検証していないか、確定前に出力していないか、といったレビューがしやすくなります。
10. 動作名詞の意味を固定する
動作名詞は、意味を固定して使います。
| 動作名詞 | 用途 |
|---|---|
| チェック | UI上の確認処理、利用者向けの実行名 |
| 検証 | 仕様・ルールに照らした確認 |
| 判定 | 業務上のYes/Noを決める |
| 計算 | 業務条件を含む計算 |
| 算出 | 数式寄りの導出 |
| 作成 | 新しいデータを作る |
| 生成 | 構造化された成果物を組み立てる |
| 読込 | 外部・シート・CSVから読む |
| 保存 | シート・ファイル・DBへ保存する |
| 保管 | 業務上の保管対象として残す |
| 出力 | ファイル・帳票・画面などへ出す |
| 書出 | 外部ファイルへ書き出す |
| 取得 | 値や情報を取り出す |
| 設定 | 値や状態をセットする |
| 変換 | 形式を変える |
| 整形 | 表示・文字列・形式を整える |
| 記録 | 証跡として残す |
| 確定 | 業務状態を後戻りしにくい段階へ進める |
特に注意したいのは、チェック です。
チェック は便利ですが、内部処理に多用すると意味が薄くなります。利用者向けのボタンやUI入口では チェック でよい場面があります。しかし、内部処理では、仕様に照らすなら 検証、Yes/Noを決めるなら 判定、値を求めるなら 計算 または 算出 に分けます。
良い例です。
UIF入力データチェックBIZ入力データ検証DAT見出し項目検証COM空白判定弱い例です。
BIZデータチェックDATデータチェックCOMチェック弱い例は、何を見て、何を返し、何が失敗なのかが読めません。名前が曖昧な関数は、後からエラー処理、メッセージ表示、ログ記録まで抱え込みやすくなります。
11. 副作用を名前で明示する
業務マクロでは、読むだけの処理と、書き換える処理を名前で区別します。
| 動作 | 副作用 |
|---|---|
| 取得 | 原則として読むだけ |
| 判定 | 原則としてBooleanを返す |
| 検証 | エラー情報、メッセージ、結果を返す |
| 作成 | メモリ上に新しいデータを作る |
| 変換 | 型や形式を変える |
| 保存 | 内部保存、シート保存、ファイル保存を行う |
| 出力 | 外部ファイル、帳票、画面などへ出す |
| 記録 | ログや証跡を残す |
| 確定 | 業務状態を進める |
例を挙げます。
DAT設定値取得BIZ対象行判定BIZ入力データ検証BIZ加工データ作成DAT加工データ保存DAT帳票PDF出力UTL処理ログ記録BIZ請求データ確定取得 という名前の関数がシートを書き換えると、読み手は裏切られます。判定 という名前の関数がメッセージを表示して処理を止めると、呼び出し側から見た副作用が読めません。
副作用がある処理は、名前でそれを示します。保存するなら 保存、外部へ出すなら 出力、ログを残すなら 記録、業務状態を進めるなら 確定 とします。
この規約は、純粋関数だけを書くためのものではありません。業務マクロでは、シートを読む、書く、ファイルを作る、画面に出す処理が必要です。だからこそ、副作用がある処理を隠さないことが重要です。
12. A To B変換は変換元と変換先を明示する
データモデル関数では、何から何へ変換するかを明示します。
英語名では次のように書けます。
input_table_to_output_tablecsv_to_recordrecord_to_journal_entry日本語名では、VBA上の扱いやすさを考え、次の形を基本にします。
DAT入力表To加工表変換DATCSVTo元データ変換DAT加工データTo出力CSV変換アンダースコアを使う案もあります。
DAT入力表_To_加工表DATCSV_To_元データただし、VBAではアンダースコアがイベント名や Implements 周りで意味を持ちます。標準モジュール中心であれば採用してもよいですが、クラスやインターフェースを多用する場合は、To を使う形の方が安全です。
また、変換 と 作成 を分けます。入力構造を別の構造へ移すなら 変換 です。複数の情報を組み立てて新しい成果物を作るなら 作成 または 生成 です。
DAT入力表To加工表変換BIZ請求データ作成DAT帳票PDF出力この違いを残しておくと、後から処理を読んだときに、単なる形式変更なのか、業務判断を含む成果物生成なのかを区別できます。
13. 依存関係は上位から下位へ流す
モジュール間の依存関係は、上位から下位への片方向にします。
UIF ↓BIZ ↓DAT ↓COM / MTD / MTHDCL は全体から参照されます。UTL と TOL は開発、検証、解析用であり、原則として本番処理から呼び出しません。CFG は構成情報であり、実行処理の中心に置きません。
避けるべき依存は次のとおりです。
DAT から UIF を呼ぶCOM から BIZ を呼ぶMTH から DAT を呼ぶUTL が本番処理に必須になるこれを許すと、処理の入口、責務、依存方向が分からなくなります。
たとえば、DAT から UIF のメッセージ表示を呼ぶと、データ読込処理が画面表示に依存します。後からバッチ処理やテストで使おうとしても、画面が出る前提になってしまいます。
COM から BIZ を呼ぶのも危険です。共通関数のはずなのに、特定業務のルールを知っていることになります。その時点で、もう汎用関数ではありません。
依存方向を守ることは、きれいな設計のためだけではありません。業務マクロを安全に直すための条件です。
14. 禁止語と注意語を決める
次の語は、単独で使うと意味が弱くなります。
データ処理実行メインサブワーク一時チェック完全禁止ではありませんが、単独使用は禁止に近い扱いにします。
悪い例です。
BIZデータ処理BIZメイン処理DATデータ保存COM処理実行UIF実行良い例です。
BIZ入力データ検証BIZ請求データ確定DAT加工データ保存COM空白判定UIF売上取込実行メイン や サブ は、作った人の作業順を表すことはありますが、業務上の責務を表しません。一時 や ワーク も同じです。何のための一時データなのか、何の作業データなのかを名前にします。
名前に迷ったときは、次の問いを使います。
これは何を入力にしているのか。
何を判断しているのか。
何を作っているのか。
何を保存または出力しているのか。
この関数を呼んだ後、業務状態は変わるのか。
この問いに答えられない名前は、まだ設計が固まっていない可能性があります。
15. 英語名を使う場合の形
英語名を使う場合は、次の形を基本にします。
prefix_domain_object_verb例を挙げます。
BIZ_sales_record_validateBIZ_billing_amount_calculateDAT_input_table_to_output_table_convertMTD_sheet_last_row_getMTH_amount_roundCOM_blank_checkPascalCaseを使う場合は次の形にします。
BIZSalesRecordValidateDATInputTableToOutputTableConvertMTDSheetLastRowGet英語動詞も、意味を固定して使います。
| 動詞 | 意味 |
|---|---|
| get | 値を取得する |
| set | 値を設定する |
| find | 探して返す |
| exists | 存在するかBooleanで返す |
| check | 軽い確認 |
| validate | 仕様・ルールに照らして検証 |
| judge | 業務上の判定 |
| create | 新しいデータを作る |
| build | 複数要素から組み立てる |
| convert | 型・形式を変換する |
| parse | 文字列などを構造化する |
| format | 表示用に整える |
| load | 外部から読み込む |
| save | 外部へ保存する |
| export | 外部形式へ出力する |
| import | 外部形式から取り込む |
| clear | 消す |
| reset | 初期状態に戻す |
| execute | 上位処理を実行する |
英語名を使う場合に注意したいのは、judge です。日本語の「判定」に近い語として使いたくなりますが、英語圏のコードではBoolean関数に is、can、has、exists などを使う方が自然な場面もあります。
たとえば、英語名中心のプロジェクトなら、次のような名前の方が読みやすいことがあります。
BIZ_invoice_target_existsBIZ_can_close_billingBIZ_is_excluded_rowこの規約では judge を禁止しません。ただし、チームの英語命名に合わせる場合は、Booleanの名前を is、can、has、exists に寄せる選択もあります。
16. 売上取込マクロで命名を組み立てる
具体例として、売上取込マクロを考えます。
モジュール構成は次のようにします。
LWP_1010DCLLWP_2010UIF_売上取込LWP_3010BIZ_売上取込LWP_4010DAT_売上取込LWP_5010COMLWP_6010UTLLWP_9010CFGUIFでは、利用者が実行する入口と、その下請けを分けます。
Public UIF売上取込入力データチェックPrivate UBZチェック条件取得Private UBZ結果メッセージ表示BIZでは、業務判断、検証、加工、計算を置きます。
Public BIZ売上取込入力データ検証Private BIZ必須見出し検証Private BIZ入力行検証Private BIZ対象行判定Private BIZ加工データ作成Private BIZ請求金額計算DATでは、読込、表変換、保存、出力を置きます。
Public DAT売上取込元データ読込Private DAT元データ読込Private DAT入力表To加工表変換Private DAT加工データ保存Private DATエラーデータ出力COM、MTD、MTHでは、業務に依存しない部品を置きます。
COM空白判定COM文字列整形MTDシート最終行取得MTD範囲値取得MTH金額丸めMTH税額計算UTLでは、開発や解析のための支援関数を置きます。
UTL処理時間計測UTL関数一覧出力UTL呼出関係解析この例で重要なのは、同じ売上取込でも、入口、業務判断、データ操作、共通部品、解析支援を混ぜないことです。
UIF売上取込入力データチェック は、利用者に近い入口です。BIZ売上取込入力データ検証 は、業務ルールに照らした検証です。DAT売上取込元データ読込 は、外部やシートからデータを読む処理です。名前が似ていても、レイヤーと責務が違います。
17. 既存マクロへ適用するときの順序
既存マクロにこの規約を適用する場合は、いきなり全関数名を変更しません。
手順は次のとおりです。
1. モジュール一覧を作成する2. 各モジュールの責務を分類する3. Public関数を洗い出す4. ボタン割当、イベント、Application.Runを確認する5. Public関数から優先して改名する6. Private関数はモジュール単位で改名する7. DAT、BIZ、COM、MTHの混在を整理する8. CFGに構成情報と変更履歴を記録する特に注意すべきなのは、ボタン割当とイベントです。
ボタンに割り当てられているマクロ名を変更すると、ボタンから呼べなくなります。イベント名を誤って変更すると、イベントが発火しなくなります。Application.Run で文字列指定している関数名も、検索漏れしやすい箇所です。
そのため、UIF、EVT、Public関数の改名は慎重に行います。
既存マクロの改名では、次の順序が安全です。
まず一覧を作り、現在の名前を保全します。
Public関数、ボタン割当、イベント、文字列呼び出しを確認します。
Public名の新旧対応表を作ります。
入口から実行確認できる範囲を決めます。
Private関数は、モジュール単位で小さく改名します。
改名後に、関数一覧と呼び出し関係を再出力します。
命名規約は、コードを壊してまで一括適用するものではありません。既存マクロでは、改名によるリスクを管理しながら、入口に近い名前、外から呼ばれる名前、業務上の責務が大きい名前から整えます。
18. 外部規約から取り込むものと取り込まないもの
一般的なVBA命名規約から取り込むべきものは、思想ではなく安全ルールです。
取り込む事項は次のとおりです。
名前の先頭は文字にする使えない記号を使わない組み込み関数名やExcelオブジェクト名と衝突させないOption Explicitを前提にするPublic名の衝突を避ける読めない省略を避ける型だけを示す接頭辞に依存しない取り込まない事項は次のとおりです。
すべて英語名にするすべて動詞で始める型接頭辞を大量につける他言語の命名作法をそのまま持ち込むこの規約の中心は、プログラミング一般の命名ではなく、業務マクロの命名です。
Excel VBAの業務マクロでは、シート、ボタン、帳票、CSV、入力表、作業表、確認表がコードと密接につながります。したがって、名前はコードだけではなく、業務資料、関数一覧、モジュール構成、操作説明とも対応している必要があります。
英語名が悪いわけではありません。日本語名が常に良いわけでもありません。大切なのは、業務上の分類、対象物、動作、副作用、呼び出し範囲が読めることです。
19. 最終定義
この規約を一文で定義すると、次のようになります。
VBA業務マクロの関数名は、3文字接頭辞でレイヤーを示し、対象物と動作名詞で処理内容を示す。モジュール名は業務上の住所として使い、関数名が長くなりすぎる場合は業務分類をモジュール名に逃がす。ただしPublic関数は、VBAの弱い名前空間を考慮し、関数名単体でもプロジェクト内で一意になるようにする。短く言えば、次のとおりです。
モジュール名 = 業務上の住所3文字接頭辞 = レイヤー対象物 = 操作対象動作名詞 = 仕事Public名 = 外から見ても一意Private名 = モジュール文脈で短くするこの方式により、VBAマクロの関数名は単なる処理名ではなく、業務処理の地図として機能します。
名前を整えることは、表面をきれいにすることではありません。業務処理の入口、判断、データ操作、共通部品、支援処理を分け、後から読める形で残すことです。
業務マクロは、作った本人だけが動かせればよいものではありません。運用され、修正され、引き継がれ、別の業務へ応用されます。そのとき、関数名とモジュール名が地図になっていれば、コードは単なる手続きの集まりではなく、説明できる業務資産になります。
出典メモ
本記事は、LWP内部メモ「VBA業務マクロ 命名設計規約」を素材として、公開記事向けに再構成したものです。
原案の主張である「モジュール名を業務上の住所とし、3文字接頭辞、対象物、動作名詞で処理内容を示す」という骨格は維持しました。公開記事化にあたり、導入、想定読者、Public/Privateの判断軸、COM 接頭辞の注意、英語名でのBoolean命名、既存マクロへの適用順序を補足しました。
