初心者のためのExcelマクロ超入門(絶対できるVBA開発)

マクロがまったくわからない人のためにエクセルマクロやVBAについてできるだけわかりやすく書いています。Twitter:@shuhhohhey

初心者のためのExcel エクセルマクロVBA入門-変数の名前付けの達人になれ!

オラだんだん口調とか砕いて書きたくなってきたぞ。昨日、声優のレジェンド野沢雅子さんがテレビに出てて、なんかスゲーもん見ました。まぁ、そんな感じです。(どんなだ?)本題行きます。

変数の名前付けルール


プログラミング言語で変数という概念は必須で、どんな言語にもあります。最近だとオブジェクトも当たり前のように出てきますのでやっぱり必須です。さて、変数ですがエクセルマクロでも当然使っています。そして変数には名前を付けるのですが。そのルールがあります。

以下ヘルプまるまる引用すると・・・

変数
データを格納するための名前を付けたメモリ上の場所。
変数には格納する値のデータ型を指定することができ、
変数に格納される値はプログラムの実行中に変更することができます。

変数名には、文字 (英数字、漢字、ひらがな、カタカナ) とアンダスコア (_) を使うことができます。
スペースや記号は使えません。変数名の先頭の文字は、英字、漢字、ひらがな、カタカナのいずれかでなければなりません。
同一適用範囲 (スコープ) 内で同じ変数名を複数使うことはできません。
また、変数名の長さは、半角で 255 文字以内でなければなりません。


( ゚д゚)?


ですな。きっと初心者には、、、えっと前半部分については、今まで説明してきた変数についての概念をちょぴっとカッコよく記述しているだけなので、あぁ箱のことね。ふん。くらいに思っていなさい。うん。
問題はその下の方。要約すると、変数に名前を付ける時のルールが書いています。

  • 英数字、漢字、ひらがな、カタカナ、とアンダースコアを使えます。
  • スペースや記号は使えないよ。
  • 名前の先頭に数字は使えないよ。
  • ローカル変数とグローバル変数同士で名前被ったらダメよ。
  • あんまり長い名前はやめてね。

ということが書かれているだけです。まぁよくも読みにくく書いたもんだ。ヘルプって基本読みにくいと思うんですが、ちゃんと頑張って読むことをお勧めしています。なぜならヘルプ=仕様ですから。

ダメな変数名


以下のようなものはアウトです。

  • $#hie2 ・・・記号は使えない
  • 3doru ・・・数字から始めてはダメ

ローカル変数とグローバル変数同士で名前がかぶってはダメ。というのはなんとなくわかりますでしょうか?

Sub test()

Dim hoge As String
Dim hoge As Long

End Sub


とか書いたら駄目よ。ということです。そりゃそうだ。どっちかわかねーもん。という基本的に当たり前のお話です。

変数名に全角文字ってありなの?


エクセルマクロのVBAという世界ではヘルプにあるとおり、変数名やはてはプロシージャ名、メソッド名などに日本語、つまり全角文字を利用することが許されています。これは他の言語では通常「ありえない」ことです。なぜならプログラミング言語は世界共通であり、基本的には英語。というか半角です。ぶっちゃけ、変数名に韓国語OKだったらどうします?


( ゚д゚)?ヨメナイ・・・


位に実は変数名に全角文字が使えることって違和感があることなんです。

なので私としては正直「おすすめしません」理由は違和感があるからとしか言えないのですが・・・もちろん使っても、VBAというプログラミングの世界で、エラーにはならないので問題はないのですが、ほんとにお勧めしません。

全角文字は通常""ダブルクオートで挟んで文字列として出力したり、コメントに記述して何をする処理なのか?を書いておいてプログラミングの補足をしたりするときにも使いますし、正直読みにくいです。

人(他の人含め)もPCも両方が読めるように書くこと

やっぱりこれが大切なことなのです。
したがって、変数名に漢字、ひらがな、カタカナを使うことは当ブログでは禁止します。

何を入れるものか?をわかるように付ける。


変数名は上のルールさえ守れば基本どのようにつけても構いません。しかし、やはり「何を」いれるものか?をちゃんとわかるようにしてゲルことが大切です。電話番号を入れるための変数なら「tel」とかそういうことです。
これも、コンピューターではなく、人がマクロを読むための施策です。

名前を付ける便利な規則LowerCamel記法とUpperCamel記法

難しい名前が出てますが、言い方の話で、単に・・・

  • 小文字で初めて後は大文字で単語をつなげる(LowerCamel)
  • 大文字で初めて後は大文字で単語をつなげる(UpperCamel)

というだけです。例えばユーザー名を入れる変数なら


userNameまたはUserName

という感じです。単語は3つでも4つでもいいです。これは良く使われる記法です。エクセルマクロの場合だと、プロシージャ名は大文字で始める、変数は小文字で始める。というようにルール分けしていることが多いです。

これはとっても重要で、こうするだけで、名前を見るだけで、これは変数なのか?メソッドやプロシージャなのか?をルールを知っているだけで見分けることができるのです。

このように相手に読みやすいように工夫するまた、自分で書いてても理解しやすい工夫というのが重要なのです。この名づけの重要性をよく理解してください。

意味が分からないと困るものに名前を付ける。


しかし、全部が全部意味を持たせて書かないといけないわけじゃないのです。一般的に重要ではない変数。というのも存在します。例えば一時的に変数に入れておきたいだけの時や繰り返しのカウンター。なんかがそうです。この辺はもうその文を見ればそれがカウンターであることが明確だからです。

ウンターを表すi,j,k,l


繰り返し制御構文で使ったりしますが、こんなのをいちいち「ForCounter」とかつけなくていいのです。見ればわかるから。また、、、

一時保存変数のtmp


これも一時的な物。という意味ですので特に意味をつけなくてもいいのです。


ウンターの略でcnt

繰り返しとは別にカウンターを使う場合によく使ったりします。

とりあえず数字という意味でn,m
メッセージを入れるようのmsg
フラグを意味するflg


などなどがあります。このように簡単に使う変数と、ちゃんと意味を付ける変数を分けるようにします。
私は個人的なルールで、変数は

・型の略式から初めて後は大文字でつなげるLowerCamel記法

と決めています。

なので、住所は「strAddress」としたり、締切日も「dtSimekiri」とか平均値も「dblAvg」など、シートロボの名前も「shtInput」というようにしています。もちろんあくまで一例なので、これに従う必要は全くないのですが、要するに、こうすることで、

自分も他人も読みやすいを目的としている


この理由からです。他にも色々とルールを決めています。メソッドも


・動詞から始めて大文字からのUpperCamel記法で書く。

このように、いわゆる書き方にルールを作ることを、

コーディング規約


と言います。これを最初に決めることで、他の人もそのルールを読めば、プログラムが読みやすくなる。というわけです。
是非、自分なりのルールを作ってみてください。


頼むからこれ読んだ後に全角文字を変数に使うなよ・・・がっかりしちゃうぞ!orz



今日はここまで!


かしこ