VBAに限らず、システム開発に携わっていると、1文字の変数名を使っているソースをしばしば見かけます。
当記事では、1文字の変数名についての私見を書きたいと思います。
私の意見
原則NG、JAVAやC#などで限られた有効範囲に使う場合に限り許容する
ネット上でも調べてみましたが、同意見の方が、ほとんどでした。
理由
①どこで変数が使われているか、探しづらい
②変数名に意味が無いため、ソースの可読性が低い
解説
よく使われるのは、ループカウンターとしての「i」「j」だと思います。
C#の例:
for (int i = 1; i <= 5; i++){
Console.WriteLike("i=" + i);
}
JavaやC#で、こんな感じで使われる分には、変数「i」の有効範囲はfor文の中に限られるため、ソース内のどこで「i」が使われているのかを気にする必要も無く、許容範囲かと思います。
ただ、同じことをVBAでやろうとすると、こうなります。
Sub test()
Dim i As Integer
For i = 1 To 5
Debug.Print "i=" & i
Next
'この部分(For文の外)でも変数「i」は有効
End Sub
このように、VBAでは「for文の中だけで有効な変数」なんてものを定義できないため、「i」がどこで使われているか、プロシージャ内の全体で気にする必要があり、非常にわかりにくいです。
とは言え、システム開発の現場では、前任者が上記のようなコーディングをしたのを解読する必要も、多々あります。
私はその都度、「文字列検索が出来ないから、やめてくれ!」と心の中で叫んでいましたが、最近、VBAのエディタでの対応手段に気付きました。

こんな感じで、「完全に一致する単語だけを検索する」にチェックを入れれば、「Print」の「i」が検索されず、1文字変数の「i」だけを検索できることに気付きました。
ただ、分かりづらいので1文字の変数名は、極力避けるべきだと思っています。
なぜ、1文字の変数名を使う人がいるかと言えば、プログラミングの書籍や解説サイトなどで、1文字の変数名が使われがちであるためだと思います。
私の職場は中小企業のためか、独学でプログラムを作ってきた前任者が多く、1文字変数をよく見かけます。
酷いとこんなの↓もあり、「見づらい!! iiって何だよ!!」と心の中で叫びました・・・
Dim i As Integer, ii As Integer
For i = 1 To 5
For ii = 1 To 5
Debug.Print "i,ii=" & i & "," & ii
Next
Next
改善例
例えば、「Excelの1行目~5行目」みたいに、行に対するループをさせたいなら、こんな感じで「IxRow」みたいな変数名にすることで、「ああ、この変数は行に対するループカウンターに使うんだな」という感じで、わかりやすくなると思います。
Dim IxRow As Integer
For IxRow = 1 To 5
Debug.Print IxRow & "行目は" & Cells(IxRow, 1)
Next
最後に
冒頭で、「JAVAやC#などで限られた有効範囲に使う場合であればOK」と述べましたが、それでも大文字の「I」(アイ)や小文字の「l」(エル)は避けましょう。見分けづらいですし、数字の「1」とも混同しやすいです。
なお、過去にCOBOLの現場で、ループカウンターの「I」(アイ:COBOLでは大文字しか使えないのです)と数字の「1」のタイプミスが原因の本番障害に出くわしたことがあり、軽くトラウマです(汗
コメント