[VBA]コーディング規約

スペース・コメント・インデント・改行

スペース

  • 行末・空行にスペースを入れないでください。
  • 1タブを4スペースと数え、1行あたり80文字以下を目標としてください。100文字は越えないでください。
  • if、elseif、do while等のブロックに指定する条件は必ず「()」を使用し、常に複数行にしてください。
  • すべての演算子「=」「:=」「+-*/」の前後に必ずスペースを入れてください。
  • すべての「,」の手前にスペースを入れないでください。
  • すべての「,」の後ろにスペースを入れてください。
  • 各ファイルの最後には空行を追加してください。

インデント

  • 「本物のタブ」でインデントしてください。半角スペースでインデントを入れないでください。
  • 行の中で単語や文の位置を揃えるためにスペースを使用しても構いません。ただし、空白スペースは最小とし、可能な限りタブを使用してください。

改行

  • 文が長く、1行に収まらない場合は「_」を使用して、演算子の直前で改行してください。

コメント

  • コメントは参照するコードの前に書いてください。原則、横に書かないでください。
  • Enum、Typeの各子要素の場合に限り、可読性の観点からコメントを横に書いて構いません。
  • コメントの前は常に1行空けてください。
  • コメント「’」の後ろには必ずスペースを入れてください。
  • コメントが、変数などの名詞形であれば名詞形で記述してください。
  • コメントが、メソッドや処理であれば動詞「だ、である調」で記述してください。また、コメントの最後に「。」はつけないでください。
  • 処理に対して、コードそのものを表すためだけのコメントは入れないでください。なぜそのコードを記述しているかの説明に努めてください。なお、処理を段落ごとに切り分けるブロックコメントであれば、処理の概要を表すだけのコメントを入れても構いません。

制御文

ブロック

  • if、elseif、do whileで指定する条件式には必ず「()」を使用し、常に複数行にしてください。
  • ネストは必ず3階層までに収めてください。4階層以上を超える場合は、別メソッドへの切り出しを行ってください。

スコープ

  • メソッドの最初に変数をまとめて定義するようなことはしないでください。変数は使用する直前に宣言し、スコープが最小になるようにしてください。

For と For Each

  • For Eachで代替可能である場合は、For Eachを使用してください。ただしループ変数が必要等の理由がある場合はForを使用してください。

Goto文

  • 例外処理の場合を除き、使用しないでください。

定数・変数・メソッド

定数

  • セル座標やシート名など、今後変更が発生しうる値については必ず定数にしてください。関連性のある数値についてはenumでまとめて定義してください。
  • 定数はモジュールの最上部に定義してください。ただし、「今後変更予定がないことが明らかである」かつ「モジュール内で完結する」定数であれば、モジュール内で定義しても構いません。

変数

  • 変数の宣言は必ず1行につき1つとしてください。
  • やむを得ない場合を除き、variant型は使用しないでください。
  • すべての変数は型を明示してください。

アクセス修飾子

  • モジュール内のメソッド、定数等、アクセス修飾子が設定可能なすべてのキーワードには「Private」「Public」を付与してください。
  • アクセス修飾子は可能な限り「Private」を設定してください。

メソッド

  • 「Private」メソッドは「Public」メソッドの下に位置するように定義してください。
  • 引数がプリミティブ型の場合は必ず値渡し(Byal)を使用してください。ただし、戻り値を複数返却するときなどやむを得ない場合は参照渡し(ByRef)を使用してください。
  • 戻り値を持たないSubメソッドの場合、メソッドを呼び出すときに必ず「Call」を先頭につけてください。

インスタンス

  • ActiveX オブジェクトのインスタンスを生成するために、CreateObjectを使用しないでください。極力「参照設定」を追加した上で、「New」演算子を使用してください。
  • 「New」演算子を使用する場合、宣言と初期化を分けてください。代入と初期化を同時に行うと、思わぬ副作用が発生する可能性があります。

配列とコレクション

  • 配列がコレクション(Collection, Dictionary)で代替可能である場合は、必ずコレクションを使用してください

 

命名規則

  • 変数名とメソッド名は省略しない完全な単語を使用してください。
  • ハンガリアン記法は使用しないでください。

変数・定数

プリミティブ型

データ型 記法
文字列型:String キャメルケース employeeId, mailSubject
数値型:Long, Double キャメルケース totalAmount, retryCount
真偽値:Boolean (is/has/can) + キャメルケース isSuccess, hasAttachment
日付・時刻型:Date キャメルケース targetDate, startTime

リスト型

データ型 記法
配列 キャメルケース + s emailAddresses, filePaths
リスト:Collection キャメルケース + s peoples, items
辞書配列:Dictionary キャメルケース + s users, orderRecords

 

列挙型

データ型 記法
列挙型:Enum e + キャメルケース eBloodType, eJob

データ型

データ型 記法
データ型:Type t + キャメルケース tPeople, tPhone

定数

データ型 記法
アッパースネークケース TAX, TIMEOUT_SEC

モジュール・メソッド・クラス

メソッド

データ型 記法
メソッド名 キャメルケース getValue, setTime
メソッド引数 キャメルケース param1, params2

クラス

データ型 記法
クラス名 c + パスカルケース cCat, cDog

モジュール

データ型 記法
メソッド名 パスカルケース MasterSheet, DBConnector

フォーム

データ型 記法
メソッド名 パスカルケース ProfileEditForm, MasterUpdateForm

 

ベストプラクティス

KISS原則、DRY原則、YAGNI原則を徹底してください。

 

 

参考サイト

Google JavaScript Style Guide 和訳 — Google JavaScript Style Guide 和訳

JavaScript コーディング規約 – Japanese Team – WordPress.org 日本語

ExcelVBAコーディングガイドライン – 和風スパゲティのレシピ

命名規則についてまとめてみた(キャメルケース,パスカルケース,スネークケース,ケバブケース, etc…) #命名規則 – Qiita