VBAの命名のルール | 変数・Sub・定数・モジュールの命名の考え方とNG例

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

よく使われるプレフィックスの例:

プレフィックス
strString
lngLong
dblDouble
blnBoolean
dtDate
wsWorksheet
wbWorkbook
rngRange

型が見ただけでわかるのがメリットですが、慣れないと読みにくく感じることもあります。チームで運用する場合に特に有効です。

スタイル③:ケース記法で意味をつなぐ

複数の英単語を組み合わせるときの「つなぎ方」を統一する方法です。

Dim client_name As String   ' スネークケース(単語をアンダースコアでつなぐ)
Dim InvoiceDate As Date     ' パスカルケース(各単語の先頭を大文字)
Dim totalAmount As Double   ' キャメルケース(最初は小文字、以降の単語頭は大文字)
ケース記法よく使う場面
キャメルケースtotalAmount変数名
パスカルケースExportReportSub名・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命名とは?

  • 意味のない名前axdataMacro1test
  • ローマ字読みの日本語syorinyuryokusakusei(英語の方が読みやすい)
  • VBAの予約語と同じ名前NameDateErrorIndex(エラーや予期しない動作の原因になる)
  • 同じ名前の使い回し:別の処理で同じ変数名を使うと混乱の元になる
  • 略しすぎて意味不明cstNm(customerNameの略)など、読んでも意味が取れない略語

チームで使える最低限の命名ルールとは?

完璧なルールより「最低限守れる簡単なルール」が実務では機能します。次の5つだけ決めておけば十分です。

  • 変数名はキャメルケースlastRowcustomerName
  • Sub名はパスカルケース+動詞始まりExportReportCheckData
  • 定数は大文字+アンダースコアMAX_ROWSTATUS_COL
  • シート変数はwsプレフィックス+内容wsDatawsSummary
  • 意味のない名前は禁止Macro1testx は使わない

まとめ

  • 命名の3スタイル:英単語ベース・プレフィックス型・ケース記法。どれが正解ではなくチームで統一することが大切。
  • 変数名:「何が入っているか」がわかる名前。キャメルケースが一般的。
  • Sub名:「何をするか」が動詞から読み取れる名前。パスカルケースが一般的。
  • 定数:すべて大文字+アンダースコアで固定値だとわかるようにする。
  • NG命名:意味なし・ローマ字読み・予約語との衝突・略しすぎを避ける。

よくある質問

ループ変数の「i」は使っていいですか?

問題ありません。For i = 1 To 10 のようなループ変数として ijk を使うのは慣例として広く認められています。ただし、ループが複雑になった場合は rowIndexcolIndex のように意味のある名前にした方が読みやすくなります。

日本語の変数名は使えますか?

技術的には使えます。ただし、全角文字の入力ミスが起きやすい・VBEでのオートコンプリートが効きにくい・英語に慣れている人には読みにくいという問題があります。コメントは日本語で書いて、変数名は英語にするのが実務では最もバランスが良いです。

VBAの予約語と同じ名前をつけるとどうなりますか?

NameDateErrorLeft などはVBAの組み込み関数・プロパティ名と同じため、使うとエラーになったり予期しない動作をすることがあります。変数名として使うとVBAが混乱するため、避けてください。

命名ルールはいつ決めるのがベストですか?

プロジェクトの最初(コードを書き始める前)が理想です。後から変えようとすると、すでに書いた変数名を全部修正する必要が出てきます。VBEの「編集」→「置換」(CtrlH)で一括置換もできますが、影響範囲が大きいので注意が必要です。

既存のコードの命名がバラバラです。統一した方がいいですか?

使い続けるコードであれば、修正のついでに少しずつ統一していくのが現実的です。一気に全部変えようとすると、変更ミスによるバグが入りやすくなります。「今後新しく書くコードから統一する」だけでも、時間が経てばかなり整ってきます。


動画で学びたい方へ

「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。

VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。

動画で学ぶExcelマクロ|JIMOVEオンラインスクール

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール