GEN MUTO'S HOMEPAGE  エクセル大事典  エクセルVBAを極める

エクセルExcel大事典 エクセル大事典TOPページへ
 ■ エクセルVBA中級編−VBAでいろんなテクニック
  識別子がいいプログラムをデザインする!
 
■ 変数やオブジェクトの命名法について

識別子とは開発者がソースコード上で命名した、変数、関数、クラスや構造体などの名前です。
この識別子は基本的に開発者が自由に命名できるため、個人で開発する分にはわかりやすければそれでよい、と思われがちですが、やはり最低限のルールと開発効率を向上させる命名法というものが存在します。
適切なコーディング規則を適用することで、理解しやすく、かつ他言語の規則に矛盾しない、正確で読みやすいソースコードを作成することができるようになります。
そうです。識別子の命名こそが、自分にも他人にもわかりやすく、正しくて保守性の良い、美しいプログラムを作成するカギを握っているのです。

識別子として有効になるには、次の制約があります

Excel VBAでは、識別子は255バイトまで指定でき、英数字および日本語と一部の記号が使用できます。ただし、先頭には記号と数字は使えません。

・先頭は文字(英字または日本語)でなければなりません
・スペースや"." "!"などの記号、型宣言文字は使用できません
・変数や定数、プロシージャの名前は255バイト以内である必要があります
・コントロール、モジュールの名前は 40バイト以内である必要があります
・予約語(ステートメント、関数、プロパティ、メソッド)と同じ名前は使用できません

識別子の大文字・小文字のスタイル

・Pascal 形式
識別子の最初の文字と、後に続いて連結されている各単語の最初の文字を大文字にします。

・Camel 形式
識別子の最初の文字は小文字にし、後に続いて連結されている各単語の最初の文字を大文字にします。

・大文字
識別子のすべての文字を大文字にします。

・ハンガリアン記法(ハンガリー記法)
変数名にプリフィックスを組み入れた命名法で最近はあまり推奨されなくなりました。ハンガリー記法はMicrosoftのハンガリー出身のプログラマCharles Simonyiにちなんだものです。 
(ここで述べるハンガリアン記法はシステムハンガリアンのことで、アプリケーションハンガリアンに関しては本文では触れません)

識別子は宣言部で宣言した際の大文字・小文字が適用されます。

例:
Dim StrFileName As String

と宣言部で定義された変数、StrFileNameは、strFileNameやSTRFILENAMEと記述しても、自動的にStrFileNameに記述しなおされます。
また、同じスコープ内で大文字小文字による識別子の区別を行いません。例えばmystrという文字列型変数とMYSTRという文字列型変数を、同一のスコープ内で異なる変数として定義することはできません。

一般的な名前付け規則

命名規則は一般的にわかりやすいものを採用します。短縮形や省略形の使用は推奨されていません。
また、アンダースコアやハイフンの使用も推奨されていません。
その他、広く使用されているプログラミング言語のキーワードと競合する識別子は使用しないのが一般的です。
関数名やメソッド名は動詞で始まること、またクラス名やプロパティ名は名詞で始まることが推奨されています。

VBA、VB6.0にはネームスペースという概念がありません。クラスに関してはクラス名が、ある意味ネームスペースの代わりを果たしますが、標準モジュールではPrivate指定をしない限りグローバルスコープになります。
ただし、別々の標準モジュールに記述された同一名称のPublicプロシージャの場合、モジュール名で修飾することによって、名前の衝突を回避できます。

例:
Public Sub main()
   Call Module1.test
   Call Module2.test
End Sub

' Module1に記述されたtestプロシージャ
Public Sub test()
  Debug.Print "Module1.test"
End Sub

' Module2に記述されたtestプロシージャ
Public Sub test()
  Debug.Print "Module2.test"
End Sub

このサンプルでは、mainプロシージャから最初にModule1のtestプロシージャがCallされたあと、Module2のtestプロシージャがCallされます。
通常はプロシージャ名だけで関数を呼び出しますが、それは
「プロジェクト名.モジュール名.プロシージャ名」で呼び出すのを省略しているだけです。

例:
Call VBAProject.Module1.test
Call test

testプロシージャが重複しない場合、上記はどちらも同一プロジェクト内のModule1から、testプロシージャをCallしています。(重複している場合、上のステートメントは実行されますが、下のステートメントはコンパイルエラーになります)

同様にグローバル変数が重複している場合も、変数をモジュール名で修飾することで名前の衝突を回避できます。

例:
Module1.MyStr = Module2.MyStr & MyStr

上記のコードをModule3から実行した場合、Module2に定義されたパブリック変数MyStrに、Module3で定義されたパブリック変数MyStrの値を連結し、Module1に定義されたMyStrに代入します。
(注)Module3内にパブリックまたはモジュールレベル、またはプロシージャレベルでMyStrが定義されていない場合、コンパイルエラーになります。(名前の衝突が発生します)

同一のスコープ(適用範囲)で同じ名前の変数が存在する場合は、修飾子を省略すると最も近い適用範囲で宣言されている変数が使用されます。
異なるスコープ(適用範囲)で同じ名前の変数が存在する場合は、該当する適用範囲のうち最も狭い範囲で宣言されている変数が使用されます。

ちなみに特殊なケースを除いて重複する、変数名、プロシージャ名、コントロール名などを使用することは推奨しません。識別子は"できる限り"重複しないことが基本です。

プリフィックス(接頭語)とサフィックス(接尾語)について

オブジェクト、変数、およびプロシージャの名前付け規則において、プリフィックス・サフィックスを用いることで可読性を増すことがあります。ただしこれらの命名規則は絶対的なものではなく、開発プロジェクトに応じて柔軟に適用することを推奨します。
データ型による一般的なプリフィックス オブジェクト名につける一般的なプリフィックス
ブール型 bln テキストボックス txt
整数型 int ラベル lbl
長整数型 lng リストボックス lst
単精度浮動小数点数型 sng コンボボックス cbo
倍精度浮動小数点数型 dbl チェックボックス chk
文字列型 str コマンドボタン cmd
エラー型 err コモンダイアログ dlg
オブジェクト型 obj フレーム fra
適用範囲を示す一般的なプリフィックス イメージ img
グローバルスコープ g    
モジュールスコープ m    
プロシージャスコープ なし    

ちなみに、型宣言のためのサフィックスや、数値リテラルのプリフィックスは、上記とは異なるものです。混同しないように注意してください。

例:
Dim Count&
Dim Password$
サフィックスの"&"、"$"で型宣言をしています。上記のCountは長整数型を、Passwordは文字列型を定義しています。

例:
&H8000
&O100000
整数リテラルにプリフィックス"&H"(16進数)、"&O"(8進数)で基数を強制させています。上記の整数はどちらも10進数の32768を表します。

以上、変数名やオブジェクト名の一般的な命名規則について解説しました。
識別子をいかに命名するか
が、そのあとの開発効率に大きく影響します。くれぐれも安易なネーミングをして、開発効率を低下させないように気をつけてください。
これは大規模な開発になればなるほど、注意すべき部分です。



最後に、一般的なコーディング規則について紹介します

VBAの言語仕様にはコーディング規則は定義されませんが、コーディング規則に則って記述することで次のメリットが得られます。

・コードの可読性が上がります
・コードの修正、メンテナンスが容易になります
・プロジェクトなど複数員の開発を行うとき、識別子の衝突や誤解によるコーディングミスを回避することができます。

■レイアウト規則

必ずインデントを挿入します。
インデントは可読性を上げるだけでなく、ロジックの構造を理解するのに役立ちます。なおインデントのタブ文字数は統一してください。(スペースをタブの代わりに使用しないでください)
可読性を高めるために長いステートメントは行継続文字" _"(スペースとアンダースコア)を使用して、複数行に分割します。
(継続行には、可読性を上げるためインデントを挿入してください)
If文を1行に記述することも避けます。
If文を1行に記述することは、If〜End Ifのブロック構造を崩し、構造化プログラミングの原則をないがしろにするものです。
同じ理由で、1つの行に":"を用いて、複数のステートメントを記述することは避けます。
変数の宣言部では、1つの行に1つの宣言を記述するようにします。

■コメント規則

コメントは、コード行の末尾に記述するのではなく、できるだけ別個の行に記述するようにします。
(ブロックコメントを推奨、インラインコメントは変数の宣言部などを除き、推奨しません)

■プロシージャの記述順序
Excel VBAではプロシージャは好きな順序で記述できます。ですので、どのような順初で記述してもコンパイルエラーにはなりません。
しかし、可読性を考えるなら、一定のルールに基づいて記述したほうが、より可読性を高めるといえるでしょう。

標準モジュール
呼び出す側のコードを先に記述します。
呼び出される側はその階層に応じて下に記述していきます。
フォームモジュール コントロールの配置順序に合わせて記述していきます。

Excel VBAには厳格なコーディング規則というものがありません。他の言語と比較しても、開発者が書きたいように、自由に記述できる開発言語です。
それゆえ、標準のコーディングルールは無視されやすい傾向があります。

しかし、標準のコーディング規則に近づけることで、より可読性の高いコードを記述することが可能になります。
標準化することで、多くのメリットが得られるでしょう。
ぜひ今後の開発の、参考にしてください。
 

>> 次の話にすすむ


サイト内検索ができます

Microsoft Most Valuable Professional

Microsoft MVP Excel
武藤 玄 プロフィール
 

■■■ 執筆した書籍 ■■■
 

EXCEL VBA 業務自動化
 

Excel VBA を5日でマスターする本
 

仕事を速くする Excel VBA 入門
 

Excel VBAと業務改善のポイントがわかる本
 

Access VBA ベーシック スタンダード
 

Excel VBA アクションゲーム作成入門
 

■■■ 連載中の記事 ■■■
 

Excel VBAで業務改善!
 

実務で使うExcel VBA
 


TOPページ


■ エクセルVBA超入門

 ・9ステップで"Hello World!"
  からオブジェクト指向まで!
  1."Hello World!"を表示しよう
  2.基本はデータの入出力
  3.繰り返し処理
  4.シートで簡易データベース
  5.名前をつけよう
  6.構造化プログラムに挑戦
  7.構造体を使ってみよう
  8.フォームを使ってみよう
  9.オブジェクト指向に挑戦

■ エクセルVBA中級編

 ・VBAでいろんなテクニック
  変数・関数のスコープ
  引数の参照方法を明示
  配列の中身を一気に複写
  識別子がよいコードを作る
  データ定義型をもっと知ろう
  定数と列挙型を活用しよう
  エラー処理の重要性1
  エラー処理の重要性2
  いろいろな条件分岐
  いろいろな繰り返し処理
  演算子について知ろう
  文字列操作 連結 変換 置換
  文字列操作 検索 比較 書式
  日付操作関数を知ろう
  数値操作・評価・その他関数
  並び替えソートをマスター
  いろいろな検索をマスター
  VBEditorを使いこなそう
  マクロの記録を活用しよう1
  マクロの記録を活用しよう2
  VBAからVBEを操作しよう1
  VBAからVBEを操作しよう2
  VBAからVBEを操作しよう3
 ・ワークシートを使いこなす
  セルの参照をマスターしよう
  セルの選択をマスターしよう
  セルの操作をマスターしよう
  セルの書式設定をマスターしよう
  行・列の操作をマスターしよう
  シートの参照をマスターしよう
  シートの操作をマスターしよう
  ブックの操作をマスターしよう
  ウィンドウの操作をマスターしよう
  イベントプロシージャを活用しよう
  ワークシートを印刷しよう1
  ワークシートを印刷しよう2
  音声(読み上げ)機能を操作しよう
  グラフを操作しよう
 ・ユーザーフォームを使いこなす
  ユーザーフォームを使おう
  UserFormsオブジェクト
  Labelコントロール
  TextBoxコントロール
  ComboBoxコントロール
  ListBoxコントロール
  CheckBoxコントロール
  OptionButtonコントロール
  ToggleButtonコントロール
  CommandButtonコントロール
  ScrollBarコントロール
  SpinButtonコントロール
 ・VBA関数の一覧
  Aから始まる関数の一覧
  Cから始まる関数の一覧
  Dから始まる関数の一覧
  Eから始まる関数の一覧
  Fから始まる関数の一覧
  Gから始まる関数の一覧
 
■ エクセルVBAを極める
 VBAスーパーテクニック
 
 ・データベースへ接続してみよう!
  CSVファイルへの接続
  ワークシートへの接続
  mdbファイルへの接続
  SQL Serverへの接続
  ADOレコードセットの操作1
  ADOレコードセットの操作2
 ・ファイルを操作してみよう!
  FileSystemObjectの操作
  Drive File Folderの操作
  TextStream ダイアログ
  ステートメントでファイル操作1
  ステートメントでファイル操作2
 ・他アプリと連携してみよう!
  ActiveXオートメーションの操作
 ・ゲーム技でマクロを超える
  エクセルで音を鳴らす1
  エクセルで音を鳴らす2  
  スクリーン座標を取得
  様々なイベント取得
  リボンUIを制御しよう1
  リボンUIを制御しよう2
  シート上でアニメを動かそう
 
■ 一歩上行くエクセル
 基本操作の完全マスター!

 
 ・あなたはいったい
  エクセルで何をしたいのか?
  エクセルで業務効率化
  エクセル関数を使いこなす
  エクセルの便利技
  エクセルは最高の帳票ツール
 ・エクセル基本操作上級編!
  セル選択、コメント、シリアル値
  オート機能を使いこなそう!
  参照、条件付書式、入力規則
  関数をもっと理解しよう!
  配列数式を有効利用しよう!
  データの正規化をしよう!
  ショートカットキーを利用しよう1
  ショートカットキーを利用しよう2
  Office用アプリを作成しよう!
  PowerPivotとExcelで簡単BI!
 ・世間の誤ったエクセルの
  べからず集
  エクセルで文章を書くべからず
  エクセルで図形を描くべからず
  エクセルでシステムをつくるな
 
■ エクセル関連その他

 ・エクセルコミニュティにあなたも
  参加しませんか?
  Excel関連リンク・コミニュティ
 ・VBの理解がVBAをマスターする
  最短距離!
  VB関連の老舗・大家サイト
 ・エクセルExcel大事典掲示板
 ・プライバシーポリシー

2000アイテムを超えるラベルを販売
送料無料、即納対応の優良ショップ
今買っているラベルより確実に安い!
OAラベルの販売専科グラフトラベル




エクセルExcel大事典ははリンクフリーです エクセル大事典Excel大事典
お問い合わせはこちら gengengen@yahoo.co.jp

Copyright© Gen Muto 武藤 玄 All Rights Reserved,