変数名が変
VBAに限った話ではありませんが、プログラミング言語では「変数」を必ず使います。
VBAは他のプログラミング言語と異なり、本職プログラマーではない人も使う機会が多いプログラミング言語のため、一般的なプログラマーが書かないようなコードを書くことがあるようです。
何度か「ネットで調べながら会社で使うマクロを作りました」というものを渡されて目にしたことがありますが、これらを見てすぐに気になるのが「変数名」、変数の名前です。
例えばこういうabcの「何も考えてない系」。
| 
					 1 2 3 4 5 6  | 
						Sub AAAA()     Dim a     Dim b     Dim c     Dim aa     Dim aaa  | 
					
それとか、このような「変数の意味を勘違いしている系」。
| 
					 1 2 3 4  | 
						Sub BBBB()     Dim hensu1     Dim hensu2     Dim hensu3  | 
					
なぜ、こんな変数名が出てくるのでしょうか。
思った通りに動いてくれればOK
上記のような変数名は「初心者プログラマーあるある」で、周囲の指導や自身の経験から改善していきますが、プログラマーで無い人にとってはそのようなものは余計なおせっかいに過ぎません。当然こういう話はすっ飛ばされます。目的は思った通りに動けばそれでよく、いちいちプログラミングの作法やらコーディングルールやらを知る動機付けがまず無いでしょう。
それどころか、そういう作法的なものを見たところで嫌になるだけです。まったく生産性がありません。さらに言えば、VBAは変数の強制はデフォルトではありません。なので、そもそもDimでの変数宣言すら必要ありません。
そもそもプログラミングに縁が無かった人にとっては「変数」という言葉自体が馴染みがないわけで、しかも、=で右辺から左辺にコピーする、という概念も理解しがたいでしょう。理解しにくいものをいちいち理解する必要なし! と実にあっさりと「変数とはなんぞや?」→「=の左に書く奴」と解決(?)し、上記のような変数名が生まれるわけです。「変数」以外にも聞いたこともないような言葉や横文字のオンパレードを浴びせられると、もういいや、となるのもわかります。
本職プログラマーであれば「初心者のうちは分からなくてもそのうち分かるようになる」というような何の助言にもなってないアドバイスを先輩等々から受けて嫌々ながらでも横文字を浴びて時間の経過で慣れていきますが、それをプログラマーでない人に要求するのは、ちょっとなー、と。
これは、プログラマーが顧客業務の仕様を把握しても業務自体を習得しないため、業界慣習や言葉の違いで問題を発生させているのと同じ図式です。
じゃあ、変数名はどう書けばいいのか
では、プログラマーで無い人がよくわからん変数にどういう名前を付ければいいのか、ということですが、明快な答えがあります。
それは、「指摘されたら直す」です。大事なのは「指摘されたら」です。指摘されなかったら直さなくていいです。変数名がおかしくてもちゃんと動いていればOKですし。
指摘することができる人は、その理由を説明できることでしょう。プログラマーで無い人はそのときに「プログラマーとして」レベルアップすればいいです。もちろんその指摘を無視しても構いません。プログラマーとしてのレベルアップはしませんが、元の職業のレベルは下がりませんから。繰り返しますがVBAが動けばOKですし。
で、私だったらどう指摘するか、という話ですが、難しい話はせず以下の2つに絞ってます。
- a、b、cはやめましょう。でも意味がある1文字ならOK。「引数argumentのa」「Workbookのb」「Characterのc」とか。
 - セットする値の名前をつけましょう。”セルの文章”であれば「cell_no_bunsyou」でも「cellValue」でも「Sentence」でもお好みで。
 
こう書くと、「ローマ字ダメ」とか「1文字変数ダメ」とか「なんちゃら記法で書け」とかいろいろ意見があるのは分かりますが、対象は「Excelでラクをしたい人」です。決して「プログラミングで苦労している人」ではありません。既に苦労している人にさらにややこしいことを言うのは鬼です。
あと、3つも4つも指摘されると、どんなに親切な言葉であってもうんざりします。2つが限度。本職のプログラマーであればこの2つだけでも劇的に改善することはわかって頂けると思います。
当サイトで使っている変数名とコード見本
ちなみに当サイトのサンプルコードの変数名は1文字とかの短いものが結構あります。ほとんどの場合はこれで事足ります。
以下は短い変数名を使っていますが、その理由はそれぞれのコメントに書いた通りで、大体が変数のデータ型の頭文字です。
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40  | 
						Sub VariableName()     Dim r       As Range            '// 単一セルのRangeオブジェクト(Rangeのr)     Dim s       As String           '// 処理で使う文字列(Stringのs)     Dim i       As Integer          '// ループカウンタ(Index、Integer、Iteratorのi)     Dim wb      As Workbook         '// Excelのワークブックオブジェクト(Workbookのwb)     Dim sht     As Worksheet        '// Excelのワークブックのシートオブジェクト(Worksheetのsht)     Dim ar()    As Variant          '// 配列(Arrayのar)     Dim d       As Double           '// 小数点を持つ値や大きい値(Doubleのd)     Dim v       As Variant          '// Variant型と明示する変数(Variantのv)     '// アクティブセルのRangeオブジェクトを取得     Set r = ActiveCell     '// アクティブセルの文字列を取得     s = r.Value     '// ループカウンタを設定     i = 0     '// アクティブブックのWorkbookオブジェクトを取得     Set wb = ActiveWorkbook     '// アクティブブックの一番左のシートのWorksheetオブジェクトを取得     Set sht = wb.Worksheets(1)     '// 小数点を持つ値を取得     d = Timer     '// 小数点でタイマー値の整数部と小数部を分割     v = Split(CStr(d), ".")     '// 配列の要素数を指定     ReDim ar(UBound(v))     '// Split結果の配列をループ     For i = 0 To UBound(v)         '// Split結果を配列にコピー         ar(i) = v(i)     Next End Sub  |