★変数の宣言!

 変数の宣言?何ですか?「センセ〜私たちは・・・」ってこと?

そうなんですよ。

プログラムを記述していく際に、プログラム言語以外の言葉を使う時には、
「センセー!これからこの変数をプログラム上では、数値として使いま〜す。」って
最初にこの変数がどんなものかを宣言をするんですね。
するとコンピューターは、プログラムを解読して処理していく中で、プログラム言語以外の言葉である変数をうまく理解して処理してくれるんです。便利でしょ!

変数は、ひとつのプロシージャー内で、こんな感じで登場してきます。

 Private Sub オブジェクト名_イベント名(引数)

 変数の宣言

 ステートメント

 End Sub
暗黙的宣言と明示的宣言

 この「変数の宣言」には、暗黙的宣言と明示的宣言とに分かれます。

暗黙的宣言というのは、
あえて変数の宣言という形を取らなくても、自動的にプログラムの言語以外の文字が記述された場合は変数として扱い、変数の宣言をしなくてもエラーとならず、バリアント型の変数として扱うというものです。
上のプロシージャーの説明の中で、変数の宣言ということを事前にしておかなくても、変数として突然で現れた文字もバリアント型の変数として扱ってくれるので、一見便利なヤツなんですが、結構落とし穴もあります。

これに対して明示的宣言というのは、
例えばプロシージャー内でDimステートメントを使って変数を宣言したりします。
これについてはまた後ほど詳しく解説するとして、明示的宣言というのは、コードを書いていく中で、最初にこれは何を表す変数かを宣言するということですね。

ここで暗黙の宣言で陥るワナについて例を出したいと思います。
下のプログラムは、「シート上のB列の最終行のその一つ下の行に最終行数を入力しなさい。」って内容なのですが、一見は問題なさそうな感じで書いていますが、ちょっとした記入ミスで思ってもいない結果になってしまいます。

例えば自分の中では変数を「active行」というように考えていたとします。
ところが記述の中で間違えて「acitve行」と書いてしまいました。

この場合は、「active行」と「acitve行」は同じ変数として扱ってくれないんですね。
だから結果が違ってくるのです。困った!困った!次のような場合です。

Sub 変数の宣言()

 active行 = Range("B65536").End(xlUp).Offset(1).Row

 Cells(active行, 2).Value = acitve行

End Sub

変数の記述が間違っているためにシート上に何も記述されないのです。

VBAの中でもそういうことを防ぐために強制的に変数を明示的にはっきり宣言しないとダメだっていう方法があります。
それはモジュールの中で最初に
「Option Explicit」と記述する方法です。こうすることで宣言されていない変数や変数を間違って記述している場合などにエラーがでて教えてくれるようになります。

 間違った変数の記述はこんな感じでエラー表示されるようになりますので、とっても便利です。
変数を最初に宣言するのは、はじめは面倒に思いますが、長くて複雑なプログラムを書くときなんかには是非活用するようにして下さい。

[前へ][トップ][次へ]