【VBA】変数の宣言をしましょう【初心者向】

  • [記事公開]2022.12.13
  • VBA

以前にも変数の宣言については記事のついでに書いておいたのですが、ちゃんと一つのテーマとしては書いたことがなかったので、取り上げてみます。

なぜ変数の宣言をしなくちゃならないのか

まずは、なぜ変数の宣言をしなくてはならないのかについて説明しておいた方がよいのですが、私が説明するまでもなく、OfficeTANAKAさんが書いた名記事がありますので、引用します。

変数って宣言しなくちゃいけないの? – OfficeTANAKA

http://officetanaka.net/excel/vba/beginner/06.htm

何年も前の記事ですが、今でも色あせない記事だと思います。

私はこれを読んで、変数の宣言をするようになりました。読んだことがない方は一度は読んでみるとよいと思います。

変数の宣言は、見えないエラーを見つけるために必要だってことが書いてあります。

変数の宣言をするためには

変数の宣言をするためには、VBE(Visual Basic for Application Editor)の、オプションを利用すると便利です。

「変数の宣言を強制する」にチェックする

ここにチェックが入っていると、モジュールを追加したとき、自動で先頭にOption Explicitがつきます。

Option Explicit

Option Explicitというのは、変数の宣言を強制するオプションです。

このオプションを使っているときに、変数を宣言せず使うと、エラーになります。

Dim Varだけでよい。Dim Var As Variantまでは必要ない

初心者のときにつまづくのが、変数の型です。

「変数の宣言をするの?でも型が分からない・・・」という初心者のあなた!私もそうでした。

いろいろなプログラム言語があって、いろいろな変数の型があって、とてもじゃないけど覚えられないと思っていました。

だから、最初は、変数の宣言だけすればよいです。

宣言とは、

Dim 変数名

だけでよいってことです。

Dim 変数名 As 型

↑ここまでは、最初はする必要はないです。

OfficeTANAKAさんでもそういう風に推奨していると思います。

型は、慣れてきたら、あるいは、型を定義する必要に迫られたら、そのときに覚えればよく、最初は覚えなくてよいと思います。

型は省略すると全部Variant型になる

As句を省略してDim宣言すると、その変数は全部Variantという型になります。

Variant型というのは、いろいろな型という意味です。暴論ですが。でも、最初はそれくらいのざっくりとした理解で十分です。

ちなみに、多言語対応してきたシステムエンジニアさんがよく次のようなコードを書きますが、

Dim ii, jj, kk As Long

この場合、Long型となるのはkkだけです。iiとjjは型が省略されたと見なされ、Variant型になります。

他言語では通用する記述方法が、VBAでは通用しないのです。

もしどうしても覚えるなら、Object型とVariant型だけ覚えればよい

もしどうしても覚えたいというのなら、VBAに限っての話ですが、Object型という型と、Variant型だけを覚えればよいと思います。

Variant型は実質、変数宣言のとき省略するので、覚えるのはObject型だけでよいということになります。

このObject型とは何かというと、

Set Obj = 何かの処理

という風に、代入するときに=だけでなく、Setも必要となる変数のことです。これもかなりの暴論ですが。

Variant型の場合、

変数 = 何かの値

という風に書けば、値を代入することができます。

しかし、VBAの世界では、Setを使わないと代入できない変数が存在します。そういった変数を使いたいときは、Dim宣言のとき、As句をつけて、Object型だと宣言しておきます。例えば、こんな風に。

Dim sh As Object

まとめ

以上、VBAでは変数の宣言をしましょうというお話でした。

なぜこんなことを書くかというと、Yahoo!知恵袋で回答していて、変数の宣言をしていないコードが多いなと感じたからです。

何かの参考になれば幸いです。