t-hom’s diary

主にVBAネタを扱っているブログ…とも言えなくなってきたこの頃。

本家VBに学ぶVBAのコーディング手法 その1

VBAをある程度書けるようになったら、本家VB(VB.Net)もやってみると良い。
VBはコードの見た目がVBAと似通っており、比較的スムーズに学習できる。
また、似ているぶん違いがはっきりするので、VBAに何が足りないのか、そしてVBAで書く場合に何に気をつけなければいけないかが見えてくると思う。

とりあえず何回かに分けて紹介していくつもりなので「その1」としたが、ネタがいつまで持つかは不明。

今回は変数宣言について。
※ここで、紹介するやり方は従来のVBAの作法・慣例になじまないかもしれません。あらかじめご了承ください。

真似できるところ

本家VBでは次のように宣言と同時に変数を初期化できる。

Dim a As Integer = 10

VBAでこの書き方はエラーになる。
VBAで似たような書き方をしたい場合は、以下のようにコロンで区切ることで複数文として書くことができる。ネットで良く見かけるし、私もよく使用する方法である。

Dim a As Integer: a = 10

本来、コロンで複数行を無理矢理1行にまとめるというのは、可読性を落とすのでVBAの作法としてはあまりよろしくない。
しかし、可読性は一つの命令だけでなく、総合的なコードの読みやすさで考えるものである。
ワンブロックが画面内に収まるかどうかという縦の長さも、可読性と大いに関係がある。
縦長の文をスッキリさせる上記の使い方についてはむしろ可読性を向上させると思うので、私はこの使い方を推奨したい。

真似できないところ

本家VBはバージョン2008から型推論をサポートしており、次のように書くこともできる。

Dim a = 10

これはVBAのDim a: a = 10と同じではないので注意。
VBAで型を書かなかったらもちろんVariantになってしまうが、VBで宣言と同時に代入する場合、コンパイラが型を推測して適切な型を設定してくれるのでVariant型ではなく、Integer型になる。
※厳密にはVB.NetにVariant型は無く、汎用データ型にはObject型が使われる。

また、VBで次のように書くとa, bともInteger型になる。

Dim a, b As Integer

VBAで同様の書き方をすると、aはVariant型、bだけInteger型となってしまう。
そのため、VBAで同じことをするには、以下のように書かなければならない。

Dim a As Integer, b As Integer

VBに比べてすごく冗長なので、宣言を1行にまとめるくらいなら、前述のように初期化を1行にまとめた方がスッキリすると思う。

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。