定期的にこの話をしています。
VBAで変数の宣言をしなくても動くのに、なぜしなきゃしけないか。
しなくていいのであればする必要ないんじゃないか、という話です。
変数の宣言をすると、変数名が自動表示されたりするので変数名の間違いを防ぐことができるというのが、変数を宣言する理由の一つであったりします。
そこに注目すると、私なんかは変数名を絶対に間違えないように慎重にプログラムをするので宣言する意味はほとんどありません。
しかし、この夏に、これが理由じゃないかというところを見つけてしまいました。
憶測に基づいてのことでMicrosoftとしても公式に表明している話でもないので、本当かどうかはわからないですが、理論的に説得力がある考え方です。
コンパイル
VBAは実行する時、その1行1行にどんな命令が書いてあって、どんな動きをするのか解釈して実行するわけではありません。
一度、プログラム全体を見渡し、コンパイルという別名最適化という動作を経て、実行されます。
VBAを実行命令すると、コンピュータはVBAの内容をチェックします。そして矛盾があるところや文法が間違っている場合、どこが間違っているか示します。これが実行前のエラーチェックです。
単純な文法ミスはそのプログラムを書いている時に書きながら発見します。
エラーがなかったら、コンピュータが動きやすい形に変換します。
VBAはあくまで人間が分としてわかりやすく書いたものです。
実際にコンピュータがコンピュータとして動きやすい形は、もっと0と1の世界のようなものなのです。それに変換します。
その変換は、よりコンピュータが安全にかつ安定的に、さらに早く動作するように変換されます。
具体的に言うとメモリを食わないように、最適化しています。
メモリを大量に食う場合、実はメモリだけではなくハードディスクにも負担をかけ、最終的に動作の不安定や動作スピードに影響します。
だからこのメモリを使わないようにするのです。
変数の宣言でのメモリの最適化
変数を宣言しない場合は、その変数がどんな形の変数かわかりません。文字かもしれないし、大きなデータかもしれないし、ファイルみたいなでかいオブジェクトなのかもしれないし、0か1かの2つしかない種類のデータかもしれません。
変数を宣言すれば、その変数がIntegerなら整数のみのデータ、Doubleなら大きめの数値データ、Stringなら文字データと、データの形と大きさが変化しない固定されたものとして宣言できます。
指定しなければ何が入るかわからないから、最も大きい何でも入るVariant型になりそれ相当のメモリ領域を使うことで変換されます。でもその変数がループ回数などの整数のみしか使わないものであれば、もっとメモリを食わないものにすることができるので、安定して動作するものとすることができるのです。
安定しなくてもいいのに
もしかしたら、変数宣言をしないで、少しくらい不安定になってもいいのにと思われる方もいるかもしれません。
確かに、動けばいいと考えるならそうです。
でも、コンピュータは絶対に安定しなければならないし無駄はあってはいけないのです。
それはコンピュータである限り絶対必要で、もしそれが甘くなるのであれば、それはもうコンピュータではなく、言い方が悪いのですがガラクタと同じなのです。
なので、安定しなくてもいいのにという考え方自体がコンピュータにはないということを覚えておきましょう。
まとめ
以上は現時点で私が思っているVBAで変数宣言をしなければならない理由です。
パソコンのメモリは最低8GBだとか、そのメモリの大きさはコンピュータの安定度に大きく影響し、そのメモリを圧迫しないために変数は宣言するということです。
それはVBAが実行前にコンパイルするという言語であることが理由なのです。
余談
ここまで書いたのは、論理的に考えてコンピュータの構造とVBAというプログラム言語というものをイメージした時に、一番VBAで変数を宣言しなければならない理由として納得できるものです。しかし、あくまで私の思ったことなのでもっと論理的な答えがあるのかもしれません。
ただ、一つだけ確実なことがあります。
私はVBAの変数宣言を遅ればせながら今年からやっています。
変数宣言をしてからVBAの作業が楽しくてたまりません。なぜかはよくわからないのですが。
このワクワク感は事実です。
ワクワクするために変数宣言する。これが今一番自分にとって説得力のある理由なのです。
コメント