テーマ
本稿では、「 変数を理解する 」をテーマに学習します。
プログラミングには必ず変数というものが登場します。変数にはいくつかの種類がありますが、ここではそうした変数の種類おのおのについての説明ではなく、それらを一般化した大枠としての変数について理解することをテーマとします。
変数を使ってみる
変数を実際に使ってみた上でその振る舞いを観察する方法がもっとも変数の理解を助けることになる思いますので、早速変数を使ってみましょう。プロジェクトエクスプローラーの Sheet1 をダブルクリックして Sheet1 モジュールを表示します。前回の Chapter で作成したマクロの下に以下のコードを書いてください。
Public Sub Chapter3()
Dim number
number = 100
Me.Cells(1, 1).Value = number
End Sub
Excel に戻り、マクロの一覧から実行してみましょう。マクロ一覧には「 Sheet1.Chapter3 」という名前で表示されていますので、それを選択して「実行」をクリックします。
実行結果はどうなりましたか?まだコードの説明はしていませんが、以下のコードは前回の演習とほぼ同じですね。
Me.Cells(1, 1).Vlaue = number
Me は自分自身を、Cells は全てのセルを、(1, 1) は1行目1列目を、Value は値を、「.」(ドット)は「の」を、それぞれ意味しているのでした。そして今回は “Hello world!” という文字列ではなく、number をそれに代入しています。おさらいも兼ねてこのコードの意味をもう一度読んでみましょう。
「Sheet1 の 全てのセルの1行目1列目の値に number を代入する。」
”Hello world!” が number に変わっただけですね。実行結果と見比べてみてください。Sheet1 のセル A1 に 100 という数値が表示されているはずです。この動作が何を意味しているのかを考えてみましょう。前回は「 = 」の右側、即ち右辺が “Hello world!” でした。そしてそれは文字列 Hello world! を意味していて、= によってその文字を左辺に代入しているのでしたね。では、今回の場合はどうでしょうか?
今回のコードも左辺は同じです。ですから左辺の意味も全く同じになります。書いていることが同じなので意味も同じなのです。当然と言えば当然なのですが、これはプログラムの特徴でもあります。同じ書き方をすれば意味も同じになるのです。日本語や英語のように発音でニュアンスが変化したりすることはありません。とてもありがたい特徴です。とういことは、今回のコードの意味は以下のようになります。
Sheet1 の全てのセルの1行目1列目の値に number を代入する。言い換えれば、Sheet1 の A1 セルの値を number にするということです。マクロの実行結果は A1 に 100 が表示されました。number という文字ではありませんでしたね。それは1行前のコードに由来します。
number = 100
既に学習した通り、= は代入を意味しています。つまり、number に 100 を代入しているのですね。そしてその number (100 という値)を A1 セルに代入していたので A1 には 100 という数値が表示されていたのです。では、number とは一体何でしょうか?この number が変数と呼ばれているものです。
前述の通り、変数 number には 100 という数値を代入出来ました。そしてそのあと number を右辺にもってくると 100 という数値をセルに代入できたのでしたね。このように変数には値を代入することができ、その値を保持する働きがあります。この働きをもう少し見ていきましょう。先ほどのコードを下記に書き換えてください。
Public Sub Chapter3()
Dim number
number = 100
Me.Cells(1, 1).Value = number
number = 200
Me.Cells(1, 2).Value = number
number = number + 100
Me.Cells(1, 3).Value = number
number = number * 100
Me.Cells(1, 4).Value = number
End Sub
コードの入力が出来たら早速実行してみましょう。実行すると、A1 セルには 100、B1 セルには 200、C1 セルには 300、D1 セルには 30000 が表示されているはずです。このコードも順を追って見ていきましょう。
number = 100
Me.Cells(1, 1).Value = number
この部分は先ほど説明した通りです。A1 セルに 100 を表示します。
number = 200
Me.Cells(1, 2).Value = number
このコードはどうでしょうか。number に 200 を代入し、さらに number を B1 セルの値に代入しています。その結果として B1 セルには 200 という数値が表示されました。このコードは変数 number が保持している値を上書き出来ることを意味しています。( 変数 number には既に 100 が代入されておりその値 100 を保持していましたが、number = 200 によって 200 という値で上書きしました)
続いて以下の部分。
number = number + 100
Me.Cells(1, 3).Value = number
number = number + 100 とし、それを Me.Cells(1, 3).Value へ代入しています。そしてこのコードが実行された結果、C1 セルには 300 が表示されました。コードの意味は直感通りです。number = number + 100 この式の右辺である number + 100 は、number が保持している値に 100 を加算することを意味しています。number には既に 200 という値が代入され、保持されている状態でしたのでそこへ 100 を加算することによって右辺の値は 300 となります。そしてその右辺の値である 300 を = によって再び number へ代入しています。つまりこの式は number の値を 300 に変更しています。このように、+ 記号を用いて値を加算することが出来るのですね。
number = number * 100
Me.Cells(1, 4).Value = number
続いてこちらのコードはどうでしょうか。
* (アスタリスク)は、VBA では乗算を意味しています。1行目の右辺は number * 100 となっており、number の値に 100 を掛けていることになります。この式が実行される前の number の値は 300 ですから、number * 100 は 30,000 となります。そして右辺の値 30,000 を左辺である number へ代入していますので number の値は 30,000 という数値に上書きされました。
もうお分かりだと思います。Me.Cells(1, 4).Value = number は D1 セルの値に 30,000 を代入しているという意味になります。このコードを実行した結果、D1 セルに 30000 が表示されたのは、このような計算結果によるものでした。
変数の宣言
まだ説明していないコードがありますね。
Dim number
このコードです。今まで敢えて説明していませんでしたが、このコードはマクロの1番最初の行に記述されています。
Dim number
このコードは number という変数を使用するという宣言です。この宣言を行うことにより、変数 number を利用する旨をコンパイラに知らせることが出来ます。この変数宣言については、変数のデータ型を学習する Chapter でもう少し詳しい内容へと深掘りしていく予定ですので、今のところ変数を使用する前に宣言を行う、と覚えておいてください。
さて、変数はこれまで見て来た通り、値を代入することや上書きすることができ、また、値を保持する能力を持っています。どのようにこのような機能を持たせているのでしょうか?変数の実体は Excel を実行している環境(例えばパソコン)のメモリー領域です。変数に値を代入することによって、メモリーにその値を書き込んでいたのです。また、式の右辺で number を用いると、メモリーから値を読み取っていたのです。例えば、このマクロの 8行目に記述されている number + 100 を VBA は実行時に変数 number 用のメモリー領域からその時保持している値を取得し、その値に + 100 という計算をして右辺全体の値を決めているのです。
まとめ
今回は変数について学習しました。学習した内容を以下にまとめておきますので確認してください。
- 変数は宣言してから使う
- 変数には値を代入できる
- 変数は代入された値を保持できる
- 変数が保持している値を取得できる
- 変数に再度代入して値を上書きすることが出来る
- 式の中で変数を用いることで計算要素の一つとすることができる
以上で本稿を終わりにします。お疲れさまでした、次回またお会いしましょう。
