VBA(に限らず多くのプログラム言語)で、避けて通れないものに
「変数」
があります。
変数ってなに?
小難しい定義はあるようですが、ひとまず
プログラムの中で
「データを入れておく箱」
だと思ってください。(箱じゃなくて皿でもお茶碗でもいいんですけど)
この箱には名前をつけて使います。
変数の特徴
まずは、プログラム例を見たほうがわかりやすいかもしれません。
プログラムの中に、下のような式があったら、cはいくつになるでしょうか?
MsgBox(c)はcの値を表示するのですが、動かす前に考えてみてください。
Sub keisan()
a = 5
b = 6
c = a + b
MsgBox(c)
End sub
動かしてみると、メッセージボックスに 11 と表示されたと思います。予想通りですか?
ここで使った a,b,cが「変数」です。
a は 5,b は 6 、なので
c = a + b = 5 + 6 = 11
これはアタリマエのようですが、ここからもいろいろ分かる・確認することがあります
変数は中身を書き換えることができる。
変数は文字通り「変な数」です。
・・・・うそです。
変数は箱なので、中身を出し入れすることができます。
たとえば次のプログラム
Sub keisan2()
a = 5
b = 6
c = a + b
a = c + 2
MsgBox(a)
End sub
4行目は、
c に入っている値に 2 を足して、箱aに入れるという意味です。
a = c + 2 =(5 + 6)+ 2 = 13
この時元々入っていた5はなくなって、上書きされてしまいます。
そして、変数は自分自身に足したり引いたりした数を入れることができます。
ですので、次のように変数1つだけで計算することもできます。
Sub keisan3()
a = 5
a = a + 6
a = a + 2
MsgBox(a)
End sub
VBAの式と数式の「=」は意味が違う。
最初のプログラム、Sub keisan() をもう少し見てみましょう。
まずは
a = 5
の部分。
数学だと「=」は等号の印なので
「 a と 5は等しい」
と定義しているところです。
ですので、 「5 = a」でも成り立ちます。
でもVBAでは、「=」は等号ではなく、左側に右側を入れる(「代入」といいます)の印と考えたほうか良いようです。
試しに次のようなプログラム
Sub keisan4()
5 = a
MsgBox(a)
End Sub
これは「構文エラー」になってしまいます。
先に書いたように変数は箱だと考えると、「=」の意味は
「左辺の変数に右辺の値を入れる」
ということになります。
ですので、5 = a は成り立たちません。
似ているけど、ちょっとだけ違います。
次に
c = a + b
の部分。
先の説明だと、cという箱に、箱a + 箱bを入れているので、c の中には箱が2つ入っていそうです。
でもSub keisan()の結果を見ると、c は 5,6 ではなくて 11でしたので、
箱cに 箱aの中身 と 箱bの中を足して入れる
という意味のようです。
ところで箱cに入れたので、箱aと箱bは空になったのかというと、そんなことはありません。
箱aにも箱bにも中身はそのまま入っています。
ですので「取り出して箱を移し替え」ではないようです。
ちょっとややこしいですね
ひとまずは
「変数名が = の右側にあるときは、(変数自体ではなく)変数の中身と同じ値を意味する」
とおぼえておけばいいようです。(万一、後々違う場合が出てきたときには、その時に考えましょう)
こう考えると、Sub Keisan3()の例も、
- a に 5を入れる
- a に aの中身と同じ値(5) + 6を入れる
- aに aの中身と同じ値(11) + 2を入れる
ということになるので、わかりやすいかもしれません。
文字だって入れられる
実は、変数には(変「数」という名前のくせに)、文字列も入れられます。
Sub keisan()
c = "VBA"
c = c + "の勉強"
MsgBox(c)
End sub
動かしてみると、「VBAの勉強」という文字が表示されたと思います。
他にもいろいろ
変数には、ワークシートみたいな「オブジェクト」と呼ばれるものも入れられるようです。
でも今のところは、「変数はいろいろ入れられる箱」とだけ覚えておけはよさそうです。
変数の宣言
多くのプログラム言語では、プログラムには、
【どんな箱を使うのか】
を教えてあげなくちゃいけないようです。
教えてあげることを
「変数の宣言」
といいます。
VBAでも、本来はちゃんと宣言をしなくてはいけません。
でも、条件によっては「Call」命令と同じ様に省略可能なようです。
何を宣言するの?
VBAで変数を宣言するときには、変数(箱)の名前の他に、
「この箱にはどんなデータを入れるのか」
も宣言します。
この「どんな」はデータの形式です。
文字なのか数値なのか、オブジェクトなのかといった、データの大雑把なタイプや
数値でも、整数なのか小数なのか、最大のデータの大きさはどれくらいなのか
と、いろいろきまっているようです。
これらのデータの形式を一般的に
「データ型」とか単純に「型」といいます。
VBA でも、ヘルプを見ると使える「データ型」がいろいろと定義されてます。
でも、しばらくは数値(整数)と、文字列くらいしか使わないと思います。
必要になったら、そのときにもう少し調べてみましょう。
省略可能なのに宣言するの?
個々で試した程度の変数であれば、頭の中で把握していれば平気かもしれません。
でも、ちゃんとVBAに教えておくと
「この変数は数字のはずなのに、文字を入れようとしてるよ」
などと、VBAがエラーを出して教えてくれたりします。
プログラムが大きくなると勘違いもでてきたりしますし、別のプログラム言語を使う機会もあるかもしれません。
省略可能な場合でもちゃんと宣言する癖をつけておいたほうが良いと思います。
変数の宣言の仕方
VBAでの変数の宣言は、頭にDimをつけて、変数の名前 as 変数の型 の順番に書いていきます。
普通は、プログラム(プロシージャ)の最初にまとめて書きますが、その変数を使う直前で宣言しても良いようです。
先のプログラム(Sub keisan)の場合だと以下のようになります。
Dim a as Integer
Dim b as Integer
Dim c as Integer
名前は、例えばtotal など 1文字 でなくても構いません。
Integer は「整数」という意味です。VBA では -32768 ~ 32767 の値の値を取れます。
文字列の場合は文字列形式を表す「String」という型で宣言します。
Dim mojiretsu As String
他にも、他のプログラム(プロシージャ)からも使えるようにするとか、ほかからは使えないようにするとか指定することも可能です。
が、いっぺんに並べても覚えられないので、必要になったときに1つづつ覚えていきましょう。
まとめ
- プログラム内でデータを扱うときには「変数」を使う事が多い
- 変数は、データの入れ物「箱」のようなもの、中身を書きかえることができる。
- 変数は、数値だけでなく、文字列や色んなタイプのデータを入れられるものがある。
- 変数に値を入れるには、「変数名 = 値」と、変数名のあとに = を置いてから、値を書く。
値は計算式でもいい。このときの「=」は数学の等号ではなく、「代入する」という意味の記号。 - = の右側の計算式に変数名があると、実際には「変数という箱の中身と同じ値」になる。
- 変数は使う前にどんな変数を使うか「宣言」する。
宣言は「Dim 変数名 as データ型」の形式で書く。 - 変数の宣言するときに指定できることはいろいろあるけど、ひとまずは最低限だけ覚えて、必要に応じて調べて覚える。(どうせわすれてまた調べるハメになるから)
次回は
もう少し基礎編として、定数のこととか、コメントのこととか書いてみようかと思います。

コメント