意外となんとかなる日記

世迷言を心に、綺麗事を頭に

スポンサーリンク

VBA等で日本語の変数名やメソッド名は有効だと思う

 先日Excelで作られた従業員一覧表をAccessで取り込みたいということがありました。

 

 

 Excelでオープンして従業員番号を取得します。

 

Sub テスト()
With CreateObject("Excel.Application")
Dim str従業員NO As String
Dim rowCnt As Long
Const COL_従業員No = 1
.Open ファイル名
str従業員NO = .cells(rowCnt, COL_従業員No).value
.Quit
End With
(処理)
End Sub

 

 こんな感じで処理を書いてみました。

 

 フォームの名前とかコントロールの名前とかを2バイト文字を使っているので、いっそのことコーディング内部にも使ってみてはどうだろうかと思って使ってみました。

 言語自体は対応していますので、コンパイル不可などというようなことはありません。

 結果、邪道かもしれませんが、予想外にわかりやすかったです。

 

 ここでのポイントは「従業員」という単語をどうアルファベットにするか?という疑問があります。

 英語的な意味を考慮してempnoとすることもできます。

 また、ローマ字にしてjyugyonoやJugyoNoとすることもできます。このようにヘボン式やらの組み合わせを考えると、結構多岐にわたることが想定されます。意外とルール化が必要です。

 

 あと_(アンダースコア)を使う使わないの問題もあります。

 

 これらを考えていってたどり着いたのがこの方法です。

 

 「気持ち悪い」だの「できるんだ・・・」などの感想もあるとは思いますが、上の例で示したアルファベットよりは個人的に可読性が高いと感じます。

 特にカラムを指定する「COL_従業員NO」は褒めてやりたいくらいです。後から見てExcel上の見出しの文字を使えますので、リテラルでソース直打ちよりは断然こちらの方が可読性が高いと思います。

 

 でも、上の例ではハンガリアン記法を用いています。strとかCOL_とか。strは少々よくない記述だと自分でも思いますが、COL_についてはこちらの方が良いのではとさえ思います。明らかにConstだと主張しているので変数との見分けが付きやすいと思うのです。

 確かに、ハンガリアン記法は好ましくないというのは知っていますが、この場合においてこれを排除しなければならないほどの悪か悩ましいと思います。

 

 しかしそもそも何故好ましくないことになったかというと

  Dim intRowCnt As Integer

 と宣言したときに、「あ、Excelって行数100万行いけるからIntegerじゃなくてLongじゃん」ということで

  Dim lngRowCnt As Long

 と記述します。

 するとこれを使用している変数を全置換する必要がでてきます。これが修正漏れによるバグの温床となります。

 そもそも行カウンタの変数が欲しいのであって、処理をする上で型なんてどうでもいい、そんなことに時間とられたくない!のではないでしょうか。

 

 今回は変数か固定値かの違いを出すためにあえてハンガリアン用いました。

 

 

 かなり前ですが過去に同様のことが議論されていますね。

メソッドや変数に日本語を採用したい − Insider.NET − @IT

 分かれるようですが、今の時代はどうでしょうか。

 私は日本語を使用するのはアリだと思います。外国人が居ないことが前提ですが。

スポンサーリンク