Excel 2003 より、ObjectList というものが使えるようになったそうだ。よくは調べていないが、使い方を見ている限り、似たようなものをClassとTypeで実装したことがある。特別新しい概念ではないような印象がある。ただ、ObjectListは結構汎用的に利用できるようだ。
Excelの場合、未だにExcel2000や2002を使っているところもある。もしかしたらまだ97や95を使い続けている所もあるかもしれない。Excelでの開発を行う際に重要なことのひとつとして、どのバージョンに対応させるのか、という観点も必要である。バージョンの指定を確認しなかったがために失敗したこともある。顧客はバージョンの違いで影響があるなどという認識は全くないので、開発側から確認する必要がある。
個人的には、使えるようにはなっておくけれど、顧客先ではまだ古いバージョンも多いので、実装するのは先かな、と考えている。
「MS Officeで役立つVBAの技:これだけは覚えとけ!」という記事を見つけた。
http://builder.japan.zdnet.com/news/story/0,3800079086,20367444,00.htm
こういうブログを書いていながらヘンかもしれないが、「世間ではVBAの注目度がそれほどないので、こういう記事が出てくること」には少々驚いた。内容は参考になるだろう。
さて、記事の文中に「ユーザーを教育し、彼ら自身でちょっとしたコーディングを行えるようにすることで、彼らからの開発要求を減らすことができるようになるだろう。Visual Basic for Applications(VBA)は学習の容易なプログラミング言語であるため、コーティング経験のないユーザーに教える言語としてお勧めだ。」
うんうん、まったくその通り。ただ、業務を持っているとなかなか片手間でできることではないことも事実。
私としてはユーザーを教育するよりも、もっと現場をよく知っているエンジニアを育てた方がいいのではないか?と思ってはいる。
コーディング規約、なぜ必要なのか?
http://revilog.com/2008/02/011137.html
この記事に「要らない場合」の一例が出ている。この記事の内容通りの環境ならば必要ないだろう。
しかし、世の中、そういう場合はあまりない。また、「顧客に納品し、メンテナンスが顧客に委ねられる」と、自分たちの手を離れるケースだと、まずそういう期待はできないのだ。まして、ユーザー部門の利用が多いVBAである。規約がないと困るケースは多々あるだろう。
上記で紹介した記事のケースでもなければ、規約は必要と考えていただいて大きくは間違っていないだろう。
VBEのメニューバーの[ツール]-[オプション]で表示されるダイアログボックスで、標準設定だと変数の宣言は強制されていないが、以下の画像の赤枠のように、強制することをお勧めする。
「いちいち変数を宣言するなんて面倒」と思う方もいらっしゃるだろう。ごく短い処理であればそれでも済む場合もあるが、それでも変数の宣言を、それも適切な型での宣言をさせた方がよい、と思う。
思いつく理由としては
・使っていない値に設定してしまう危険性がある
・型を間違ってしまう危険性がある
がある。
※以下のサンプルコードはまたしても実行していないので、おかしな場合はご連絡を。
【使っていない値に設定してしまう危険性がある】
例えば次のようなコードがあったとする。
Sub aaa_0()
'AとBの加算結果を表示する
A = 1
B = 2
C = A + B
MsgBox D
End Sub
上記プログラムでは何が表示されるだろうか?実際はこれほど単純なミスも希であろうが、例なのでご了承頂くとして、コメントに入れたとおりの結果は得られない。
このときに、A、B、C を宣言しておけば、間違えてDを使ったとしてもエラーが出るので防止することができる。
Sub aaa_1()
'次の3行を追加
Dim A As Integer
Dim B As Integer
Dim C As Integer
'AとBの加算結果を表示する
A = 1
B = 2
C = A + B
MsgBox D '←宣言されていないのでエラーが発生する
End Sub
【型を間違ってしまう危険性がある】
例えば次のようなコードがあったとする。
Sub bbb_0()
'AとBの加算結果を表示する
A = 1
B = 2
C = "A"
D = A + C
MsgBox D
End Sub
変数を定義していないと変数は Variant型になる。Aの内容は数字の1、Cの内容はアルファベットのAなので、一見足し算なんぞできないように思えるが、+ は文字列の結合をする演算子でもあるのだ。よって、「文字同士の結合」だと勝手に解釈されてしまう。
Sub bbb_1()
'次の4行を追加
Dim A As Integer
Dim B As Integer
Dim C As String
Dim D As Integer
'AとBの加算結果を表示する
A = 1
B = 2
C = "A"
D = A + C '←演算結果が数字ではないのでエラーが発生する
MsgBox D
End Sub
【まとめ】
上記のように、変数の宣言はミスを防いでくれるのだ。多くのコンピュータ言語は「変数の宣言は当たり前」であり、また「Variantのような何でも屋の型はまずない」のである。(詳しい方へ:プリミティブな型、とご理解願います)
型を正しく宣言しないと、宣言したソフトウェアよりもテスト工数が多くなり、製造に余計なコストがかかる、ということにもなるのである。たとえ短いプログラムであったとしても、かならず「正しい型を宣言する」ようにすることをお勧めする。
Amebaおすすめキーワード