ExcelマクロVBA技術解説 | 変数とプロシージャーの命名について | Excelマクロの問題点と解決策、エクセルVBAの技術的解説



最終更新日:2017-02-12

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

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

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

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

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


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



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

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

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

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


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

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

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


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


ここまで学んで、では、先の「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で候補表示した時に探しやすいというのもあります。

少し↓にすると、

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


変数名やプロシージャー名を見ると、それを書いた人の力量もある程度は計り知れるものです。
それくらい、人によって使い方が変わるものであり、使い方は千差万別であるとも言えます。
ただし、慣用的に使われているものは、それにならう事も必要です。
それは、他人が見たときにわかり易いという事になるからです。
例えば、
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を書いてみるのも良い勉強になるはずです。




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

マクロとは、VBAとは
コーディングとデバッグ
オブジェクトとプロパティの真実
WorksheetFunctionについて
RangeとCellsの深遠
Offset、Resizeを使いこなそう
マクロ作成後に、表位置がずれた場合の対処

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

変数とプロシージャーの命名について|ExcelマクロVBA技術解説(2月12日)
ファイルの一覧取得・削除(File)|Google Apps Script入門(1月24日)
フォルダの一覧取得・作成・削除(Folder)|Google Apps Script入門(1月24日)
フォルダとファイルを扱う(DriveApp)|Google Apps Script入門(1月24日)
スプレッドシートが非常に遅い、高速化するには|Google Apps Script入門(1月17日)
画像のトリミング(PictureFormat,Crop)|ExcelマクロVBAサンプル集(12月27日)
シート保護|Google Apps Script入門(12月24日)
表示の固定|Google Apps Script入門(12月24日)
グラフ|Google Apps Script入門(12月21日)
入力規則|Google Apps Script入門(12月13日)

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

1.RangeとCellsの使い方|ExcelマクロVBA入門
2.最終行の取得(End,Rows.Count)|ExcelマクロVBA入門
3.徹底解説(VLOOKUP,MATCH,INDEX,OFFSET)|エクセル関数超技
4.Range以外の指定方法(Cells,Rows,Columns)|ExcelマクロVBA入門
5.セルの参照範囲を可変にする(OFFSET,COUNTA,MATCH)|エクセル関数超技
6.セルのコピー&値の貼り付け(PasteSpecial)|ExcelマクロVBA入門
7.変数とデータ型(Dim)|ExcelマクロVBA入門
8.ひらがな⇔カタカナの変換|エクセル基本操作
9.CSVの読み込み方法|ExcelマクロVBAサンプル集
10.VBAのFindメソッドの使い方には注意が必要です|ExcelマクロVBA技術解説



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

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


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

    ↑ PAGE TOP