変数や定数に、型を表すプリフィクスを付加する表現方法である。

〔例 アンダーバーは使わないパターン〕
Dim iCnt As Integer ' i がプリフィクス
Dim lRecCnt As Long ' l がプリフィクス
Dim shtFrom As Worksheet ' sht がプリフィクス

〔例 アンダーバーを使うパターン〕
Dim i_Cnt As Integer ' i がプリフィクス
Dim l_RecCnt As Long ' l がプリフィクス
Dim sht_From As Worksheet ' sht がプリフィクス

よくVBAではプリフィクスを3桁としている表記をよく見かける。いろいろ意見はあるだろうが、IntegerやLongのような、基本的で頻出する型については1桁でよいだろう。
上記の例で、Worksheet を sht としているが、Worksheet、Form、TextBoxなどのオブジェクトは3桁くらいないと分かりにくいように思う。また、通貨型など、頻繁に使うものでないとか、他の言語にあまりないものは3桁くらいあった方が分かりやすいようだ。また、プリフィクスと変数の間を _ (アンダーバー)でつなぐのもよいだろう。
このあたりは経験と分かりやすさで選ぶとよい

開発プロジェクトでは経験してきた現場や言語により個人個人の常識が違う。なるだけ早期に確立しておくことが必要である。 ハンガリアン記法で享受できるコーディングやテスト時のミスを若干減らせること、保守時に理解が早くなることなどのメリットは捨てがたいからだ。


最近はクラスを独自に作ることもあり、ハンガリアン記法を使わないことも見かける。まあ、それはクラス用の表記を決めるように決めればよいように思う。


なお、ここまで「システムハンガリアン」ということについて書いている。

ハンガリアン記法には、システムハンガリアン以外に、アプリケーションハンガリアン、という概念があるそうだ。
アプリケーションハンガリアンは「変数の意味を変数名とすることで、間違ったコードが間違って見える」ことを目的としている。
もう少し言及すれば、変数の使い回しのようなことをせず、例えば行を表すなら lRow などとし、行を表す以外の用途には使わない。列を表す表現に、iCol_A、iCol_Bのような、汎用的に使うようなモノを作らない、など、となるであろう。

アプリケーションハンガリアンの概念も重要であるので、規約として定めた方がいいだろう。できれば変数の辞書や命名規約を作る、などができるのが望ましいだろう。

なお、上記に関係する部分でもあるが、

・型の略し方
・大文字小文字の混ぜ方
・Const値の表記方法
・スコープがPublic、モジュール/クラス内でのPrivate、Private のプリフィクスの付記方法
・型による限界値(例:Integerのとりうる範囲、など。C言語やDBMSではIntegerと書いても桁数が違う場合もあるので。)の把握
・型がデータベースのどの型と一致するか

あたりも決めておき、文書にして、共有しておくとよいだろう。




アメブロの記事より前に出ている、ブログの案内みたいなやつ、メッセージボードがある。
これ、2000文字までで、とエラーが出ることがあるが、どう見たって2000文字に到達していない場合もある。

この場合、いったん「HTMLタグを表示」タブを見てみよう。
もし、行と行の間が改行だらけだったら、それを詰めてみよう。

上記画面で、Ctrl + A で全体を選択し、Ctrl + C で内容をコピーする。
その内容をテキストエディタ(メモ帳など)に貼り付け、編集した後に、元の画面に貼り付ければ解消する事がある。


ご参考まで。

Windowsだけで処理をしている場合はほとんど問題ないが、それ以外のOSが絡む場合、文字コード体系は Shift-JIS/ASCII に変換して貰って受理しても、改行コードが LF のファイルを受け取ることがある。


さて、CR や LF と言われて分からない方もいらっしゃるだろう。


例えば、テキストエディタ上で改行をすると、ちゃんと改行する。次に開いたときもそこで改行している状態が保持される。これは、改行する、という記号が埋め込まれているからだ。制御コードとか制御文字とか言われるが、その記号が、WindowsではCR+LFと呼ばれる。CRはキャッジリターンで、行の先頭に戻る、という意味で、内部コードは16進数で0x13 である。LFはラインフィードで、行を1行送る、という意味で、内部コードは16進数で 0x10である。(16進数表記の時は、それだと分かるように先に0xをつける事が多い。実際は 13 と 10 という、1バイトのコードである。)


UNIX系はLFが改行コードとなるため、しばしば CR がないものが渡されることがあるのだ。(Macは・・すいません。知りません。)


話を戻す。LFだけでCRのないcsvファイルを VBA の Line Input で読みこむと、一気に全内容を読み込んでしまう。Line Input では行の区切りを認識するのに少なくとも CR が必要だからである。

対策としては、受理する時点でCR+LFでファイルにしてもらうこと。さもなくば、いったんシートにcsvを読み込むようにすればよい。csvをシートに読み込む分にLFだけでも認識してくれるのだ。VBAでいったんシートに読むようにすると手作業は減るだろう。

ちなみに、CR、LF、CR+LFはVBAで定数として持っている。

例えば
Debug.Print Asc(vbLf)
の結果は 10 が返るし、

Debug.Print Asc(vbCr)

の結果は 13 が返る。


なお、たまにコード内で CR を意味するコードとして、Chr(13)などと書いているコードがあるが、可読性に欠けるので、vbCrなど、定数を使った方がいいだろう。

ただ、うろ覚えなのだが、vb.netのマニュアルにこの書き方があまりよくないような書き方があったような記憶もある。その辺はまた確認したい。

ブログトップへ
ブログ内検索キーワード
改行
csv