VBAの命名に絶対の正解はありませんが、「何が入っているか・何をするSubか」が名前から読み取れることが最低限のルールです。変数・Sub・定数・モジュールそれぞれに命名の考え方を持っておくだけで、コードの読みやすさが大きく変わります。
この記事では、次の内容を順番に解説します。
- 命名の3つのスタイル(英単語・プレフィックス・ケース記法)
- 変数名・Sub名・定数・モジュール名それぞれの命名の考え方
- 避けるべきNG命名の例
- チームで使える最低限の命名ルール
命名の3つのスタイルを比較するには?
スタイル①:英単語ベースのシンプル命名
最もよく使われるスタイルです。英単語やその自然な省略形をそのまま使います。
Dim total As Long
Dim nameList As Variant
Dim wsData As Worksheet
シンプルで覚えやすいですが、略し方が人によって変わると統一感がなくなります。チームで使う場合は「略し方のルール」をあわせて決めておくと効果的です。
スタイル②:型を頭につけるプレフィックス命名
変数名の先頭に型を表すプレフィックス(接頭辞)をつけるスタイルです。
Dim strTitle As String ' str = String
Dim lngCount As Long ' lng = Long
Dim wsSheet As Worksheet ' ws = Worksheet
Dim blnFlag As Boolean ' bln = Boolean
よく使われるプレフィックスの例:
| プレフィックス | 型 |
|---|---|
str | String |
lng | Long |
dbl | Double |
bln | Boolean |
dt | Date |
ws | Worksheet |
wb | Workbook |
rng | Range |
型が見ただけでわかるのがメリットですが、慣れないと読みにくく感じることもあります。チームで運用する場合に特に有効です。
スタイル③:ケース記法で意味をつなぐ
複数の英単語を組み合わせるときの「つなぎ方」を統一する方法です。
Dim client_name As String ' スネークケース(単語をアンダースコアでつなぐ)
Dim InvoiceDate As Date ' パスカルケース(各単語の先頭を大文字)
Dim totalAmount As Double ' キャメルケース(最初は小文字、以降の単語頭は大文字)
| ケース記法 | 例 | よく使う場面 |
|---|---|---|
| キャメルケース | totalAmount | 変数名 |
| パスカルケース | ExportReport | Sub名・Function名 |
| スネークケース | MAX_ROW | 定数名(すべて大文字) |
変数・Sub・定数・モジュールの命名の考え方
変数名:「何が入っているか」が読み取れるように
' 良い例
Dim lastRow As Long ' 最終行番号
Dim customerName As String ' 顧客名
Dim wsData As Worksheet ' データシート
Dim isProcessed As Boolean ' 処理済みフラグ
' 避けるべき例
Dim x As Long ' 何が入るか不明
Dim data As String ' どのデータか不明
Dim a1 As Boolean ' 意味なし
Sub名・Function名:「何をするか」が動詞から読み取れるように
' 良い例(動詞+対象の形)
Sub ExportMonthlyReport() ' 月次レポートを出力する
Sub ImportSalesData() ' 売上データを取り込む
Sub CheckInputErrors() ' 入力エラーをチェックする
Function CalcTax(price As Double) As Double ' 税額を計算する
' 避けるべき例
Sub Macro1() ' 何をするSubか不明
Sub test() ' 本番で使うのかテスト用か不明
Sub syori() ' ローマ字読みは読みにくい
定数名:すべて大文字+アンダースコアで固定値だとわかるように
Const MAX_ROW As Long = 10000 ' 最大処理行数
Const STATUS_COL As Long = 3 ' ステータス列番号
Const SHEET_NAME As String = "データ" ' 対象シート名
モジュール名:役割がわかるプレフィックスで分類する
' モジュール名の例
M_Main ' メイン処理
M_Export ' 出力処理
M_Import ' 読み込み処理
M_Common ' 共通処理
M_Check ' チェック処理
避けるべきNG命名とは?
- 意味のない名前:
a・x・data・Macro1・test - ローマ字読みの日本語:
syori・nyuryoku・sakusei(英語の方が読みやすい) - VBAの予約語と同じ名前:
Name・Date・Error・Index(エラーや予期しない動作の原因になる) - 同じ名前の使い回し:別の処理で同じ変数名を使うと混乱の元になる
- 略しすぎて意味不明:
cstNm(customerNameの略)など、読んでも意味が取れない略語
チームで使える最低限の命名ルールとは?
完璧なルールより「最低限守れる簡単なルール」が実務では機能します。次の5つだけ決めておけば十分です。
- 変数名はキャメルケース:
lastRow・customerName - Sub名はパスカルケース+動詞始まり:
ExportReport・CheckData - 定数は大文字+アンダースコア:
MAX_ROW・STATUS_COL - シート変数はwsプレフィックス+内容:
wsData・wsSummary - 意味のない名前は禁止:
Macro1・test・xは使わない
まとめ
- 命名の3スタイル:英単語ベース・プレフィックス型・ケース記法。どれが正解ではなくチームで統一することが大切。
- 変数名:「何が入っているか」がわかる名前。キャメルケースが一般的。
- Sub名:「何をするか」が動詞から読み取れる名前。パスカルケースが一般的。
- 定数:すべて大文字+アンダースコアで固定値だとわかるようにする。
- NG命名:意味なし・ローマ字読み・予約語との衝突・略しすぎを避ける。
よくある質問
ループ変数の「i」は使っていいですか?
問題ありません。For i = 1 To 10 のようなループ変数として i・j・k を使うのは慣例として広く認められています。ただし、ループが複雑になった場合は rowIndex・colIndex のように意味のある名前にした方が読みやすくなります。
日本語の変数名は使えますか?
技術的には使えます。ただし、全角文字の入力ミスが起きやすい・VBEでのオートコンプリートが効きにくい・英語に慣れている人には読みにくいという問題があります。コメントは日本語で書いて、変数名は英語にするのが実務では最もバランスが良いです。
VBAの予約語と同じ名前をつけるとどうなりますか?
Name・Date・Error・Left などはVBAの組み込み関数・プロパティ名と同じため、使うとエラーになったり予期しない動作をすることがあります。変数名として使うとVBAが混乱するため、避けてください。
命名ルールはいつ決めるのがベストですか?
プロジェクトの最初(コードを書き始める前)が理想です。後から変えようとすると、すでに書いた変数名を全部修正する必要が出てきます。VBEの「編集」→「置換」(Ctrl+H)で一括置換もできますが、影響範囲が大きいので注意が必要です。
既存のコードの命名がバラバラです。統一した方がいいですか?
使い続けるコードであれば、修正のついでに少しずつ統一していくのが現実的です。一気に全部変えようとすると、変更ミスによるバグが入りやすくなります。「今後新しく書くコードから統一する」だけでも、時間が経てばかなり整ってきます。
動画で学びたい方へ
「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。
VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。



