VBA技術解説
変数とプロシージャーの命名について

ExcelマクロVBAの問題点と解決策、VBAの技術的解説
公開日:2017-02-12 最終更新日:2017-02-12

変数とプロシージャーの命名について

VBAを習い始めると、「変数」について学びます、


変数に付ける名前を変数名と呼び、若干の規則はあるが、好きな名前を付けて良いと教わります。

好きな名前って・・・ケイコ、ハルカ、アツコ・・・

まあ、それでも良いけど、入れるデータが分かるような名前がよいですね、わかり易い名前を付けましょう。

というようなやり取りを経て、では日付を入れる変数を書くと、

VBA サンプル画像

エラーになってしまいました、何でもよかったのでは・・・

使えない(使ってはいけない)単語もあります。

変数名は、プログラミングにおいて、結構悩ましいものです。

以下では、一般の(職業プログラマーではない)人がVBAを書く上で知っておいた方が良いだろう事を記載します。
※職業プログラマーさんは、所属する組織やクライアントの規約等に従うまでです。


VBAの変数名の規則
・英数字(全角半角)、漢字、記号はアンダーバー(_)だけ使える、空白(スペース)は使えない
・先頭には、数字やアンダーバー(_)は使えない、英文字か漢字で始める
・使えない予約語がある
・長さは半角で255文字まで

ここで注意するのは3番目の予約語でしょう。
予約語とは、VBAステートメント、キーワード、演算子、システム日時等
if,else,with,true,date

使えないことはないが、使わない方がよいものに、
VBAが持つ、関数名やオブジェクト名は使わない方が良いです、いや、使ってはダメですね。

VBA サンプル画像
ここに候補表示される単語です、
オブジェクトブラウザ(F2)で見ることも出来ます。
VBA サンプル画像


ここまで学んで、では、先の「date」は何という名前を付けたらよいのか、
日付を入れる変数なのだから、dateがわかり易いはずだが・・・
少し悩んで、
hizuke
と言うような変数名にするのは良くあることで、決しておかしくはないし、わかり易さと言う点では評価できる命名です。


だが、どうしても野暮ったい感じがしてしまい、もっと良い命名はないかと考えるものです。
VBAに限らず、プログラミング全版における命名方法について調べてみましょう。


一般的な命名記法
ハンガリアン記法
特別な接頭文字ないし接尾文字をつける記法です。
アプリケーションハンガリアン、システムハンガリアン
に分けられるが、そこまで意識する必要はないでしょう。

変数名の先頭に、ある決まった文字列を書くという認識で良いです。
良く行われるのが、データ型(Long,String等)の略称を先頭に付けます。
lngCount,strName
等々になります。
3文字を付ける場合が多いですが、1文字で
lCount,sName
このようにしてもよいです。

データ型の略称方法については、慣用的なものがありますが、特にそれに縛られることはないでしよう。
Integer int
Long lng
Single sng
Double dbl
String str
Date dtm
Boolean bln
Variant var
等々
キャメル記法
複合語をひと綴りとして、単語の最初を大文字で書き表します。
この記法は、大きく2通りに分かれます。
アッパーキャメルケース(パスカルケース):複合語の先頭を、大文字で書き始める。
ローワーキャメルケース(キャメルケース):複合語の先頭を、小文字で書き始める。

細かい使い方は、それほどきにする必要はありませか。
要は、単語の先頭を大文字にすることで読みやすくするという事です。
deliverydate
これは、
DeliveryDate
とすれば読みやすくなります。

スネーク記法
複合語の各単語の区切りに、アンダースコア(_)を用いる方式

deliverydate
これは、
delivery_date
とします。


漢字名称について

これについては批判的な意見が大半だと思われます。
特に漢字を使ったからと言って、誤作動があるわけではないし、
読みやすさという観点では、これ以上の読みやすさはないでしょうね。
しかし、そもそもタイピングが面倒ですよね。
私は、特殊な場合を除いて漢字は使わないようにはしています。
特殊な場合と言うのは、英語表記では分かりずらい場合です。

例えば、ワークシートをオブジェクト変数に入れる場合、
シート数が多いと命名しずらく、また、分かりずらくなってしまいます。
そのような場合は、
sht,sh,ws
等の接頭文字に続けて、漢字でシート名を付けたりします。
ws入力,ws出力
のような名前です。
このようにすることで、変数の使用間違いを防止できますので、この場合は漢字を使います。

プロシージャー名については、その時々で使う事もあります。
ここはもう読みやすさだけの問題ではないかと思います。

VBAなら、漢字名称もありだと、個人的には思っています。
念の為申し上げるなら、私もVB.NETを書くときは漢字名称を使う事はほとんどありません。



私が好んで使う方法
それぞれ一長一短があり、どれが良いという事ではありませんが、
スネーク記法は、名前が長くなってしまうので、個人的にはよほど特殊な場合以外は使いません。

個人的に私が使うのは、
ハンガリアン記法とキャメル記法を使い分け、または複合使用しています。
変数名は、ハンガリアンが基本
プロシージャー名は、キャメルが基本
簡単に言うとこんな感じです。

先のdateに関する場合であれば、
変数なら、
dtmDate,dtDate,dDate
プロシージャーなら、
getDate,setDate
のようになります。
接頭文字を付けるハンガリアンは、予約語を気にしなくて済むという点で名づけしやすいものです。


ハンガリアン記法に対する批判について

ハンガリアン記法に対しては、いろいろな意見があり、近年は批判が目立つようです。
特に接頭文字として、データ型を付けることに対しての批判が多いように見受けられます。
しかし、それはプログラミング言語(開発環境)に依存するものであり、一般論として語っても意味のないものです。
例えば、
Visual StudioのVB(VB.NET)であれば、確かにデータ型を付けたハンガリアンはあまり意味がないかもしれません。
変数にマウスオーバーするだけでデータ型が分かるのですから・・・
しかし、それとVBAを同列に語っても意味がないことは明らかです。

特に、
プログラミング初心者が、データ型を意識できるようになったとき、
一度はハンガリアン記法で、接頭文字にデータ型を付けて書いてみることは、
プログラミング習得の過程として極めて重要な事です。

また、ハンガリアン記法の良さとして、あまり語られないようですが、
Ctrl+Spaceで候補表示した時に探しやすいというのもあります。
VBA サンプル画像
少し↓にすると、
VBA サンプル画像
Ctrl+Spaceの後、接頭文字を打って↓で探すことが容易になりますので、
VBEをスクロールして変数名を確認したり、打ち間違い防止にもなります。
特に、
ユーザーフォーム作成時は、コントロールの命名にはハンガリアンが良いです。
txt○○
cmb○○
等々とすることで、
Me.
に続けて、接頭文字を打つことで、コントロール名が候補表示されます。
VBA サンプル画像


変数名やプロシージャー名を見ると、それを書いた人の力量もある程度は計り知れるものです。
それくらい、人によって使い方が変わるものであり、使い方は千差万別であるとも言えます。
ただし、慣用的に使われているものは、それにならう事も必要です。
それは、他人が見たときにわかり易いという事になるからです。
例えば、
Forで使うカウンター変数は、
i
を使うのが一般的で、無理に別のものを使うべきではありません。
2つ以上必要な場合は、
i,j,k
i1,i2,i3
等が良いでしょう。


ちょっと上級者っぽく見せる命名
カウンター変数
ループが2重になった時、最初はiで、そのループの中で使うカウンター変数ですが、
当然、j,k等でも、i2,i3でも良いのですが、
ii
何てのも良く(たまに)使われます。
iiなんてみると、おー、なんか知らんけどすごい・・・
みたいな感じを受けるとか受けないとか(笑)
個人的には、上品な使い方とは思っていませんけどね。
is変数
Boolean変数を使えるようになったら、isを付けてみましょう。
Dim isOk As Boolean
OKの時にTrue、以外の時はFalse
これを使う場合は、くれぐれもTrueとFalseを逆に使ったりしないようにして下さい。

これをさらに格好良くしたい場合は、
isのほかに、canやhasを使い分けられると、もう完璧です。
これを見せられれば、こいつやるなーとなること間違いなしです。
もっとも、ここまでくると命名の問題というより、プログラミング技術そのものが問題になってきますが。
プロシージャー名
プロシージャー(sub,Function)はプログラミング言語の括りとしてはメソッドになります。
メソッドなので、基本は動詞を使います。
set
get
delete
add
put
等々を先頭に付けて、キャメルケース(最初の動詞は小文字で、その後の単語は大文字で始める)で書きます。
それなりに恰好良く見えるはずです(笑)

VBAに組み込まれているメソッドは、
パスカルケース(複合語の先頭を全て大文字で書き始める)になっていますので、
キャメルケース(最初の動詞は小文字)にすることで、システムとの違いも明確に出来るのでお勧めです。


グループでコードを共有する場合は、最低限の規則は作るべきでしょう。
ただしその規則は、世間一般でどうかという事より、グループの人たちが間違いなく理解し実践できる規約が良いのです。
無理に上級ぶった規則を作っても、プログラミングの作業効率を極端に下げる結果となっては本末転倒です。
(もちろん、作業効率を下げてでも品質を高めたいという場合もあります。)


コードを他人と共有しないのなら、つまりは、
個人で作成するだけなら、自分規則を作れば良いという事になります。
プログラミングの習得過程では、その自分規則が徐々に変化していきます。
その変化こそが、プログラミング技術が向上しているという事の証でもあります。
多くのプログラマーがこれを経験し、プログラミング技術を向上させていったのです。

変数やプロシージャーは、VBAプログラミングの初歩であり基本です。
しかし、どの世界でも同じですが、基本ほど難しいものはありません。
基本の立ち居振る舞いで、その人の力量が分かってしまうものです。
少しだけ背伸びをして、ちょっとだけ恰好付けてVBAを書いてみるのも良い勉強になるはずです。



同じテーマ「マクロVBA技術解説」の記事

論理積(And)論理和(Or)と真(True)偽(False)の判定
If条件式のいろいろな書き方:TrueとFalseの判定とは
VBAでの括弧()の使い方、括弧が必要な場合
VBAにおけるピリオドとカンマとスペースの使い方
変数とプロシージャーの命名について
文字列置換の基本と応用(Replace)
データクレンジングと名寄せ
ForとIfのネストこそがVBAの要点
For Next の使い方いろいろ
複数条件判定を行う時のコツ


新着記事NEW ・・・新着記事一覧を見る

VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)
複数の文字列を検索して置換するSUBSTITUTE|エクセル入門(2024-01-03)
いくつかの数式の計算中にリソース不足になりました。|エクセル雑感(2023-12-28)
VBAでクリップボードへ文字列を送信・取得する3つの方法|VBA技術解説(2023-12-07)
難しい数式とは何か?|エクセル雑感(2023-12-07)
スピらない スピル数式 スピらせる|エクセル雑感(2023-12-06)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.変数宣言のDimとデータ型|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.並べ替え(Sort)|VBA入門
8.条件分岐(IF)|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ