2回目:変数とは
全6回で勉強するプログラミング、2回目です。今回はプログラミングで避けては通れない”変数”について勉強します。
変数とは
まずは変数を使ってプログラムを書いてみましょう。第1回目を参考に標準モジュールを表示します。今回、エクセルは新規で起動します。
- エクセルを起動
- Alt+F11でVBA画面を表示
- プロジェクト画面のどこかで右クリック
- 標準モジュールを選択
下のプログラムをタイプして実行してみましょう。
Sub Test2()
MsgBox 1 + 4
End Sub
実行すると下の図のようなメッセージが表示されます。
数字の1と4を足した結果が表示されました。ここで、変数を使って同じことをやってみます。
Sub Test2()
MsgBox 1 + 4
‘変数を使う
a = 1
b = 4
MsgBox a + b
End Sub
2回メッセージが表示され、どちらも数字の5が表示されたと思います。上記プログラムのaとbが変数と呼ばれるものです。aの中に数字の1、bの中に数字の4を入れてます(代入といいます)。 さらに理解を深めるために、次の命令を追加してください。
Sub Test2()
MsgBox 1 + 4
‘変数を使う
a = 1
b = 4
MsgBox a + b
‘次の命令を追加
a = 1
b = a
MsgBox a + b
End Sub
変数とは
3回目のメッセージには何が表示されるでしょうか?実行してみてください。追加した命令ではaの中に数字の1を代入して、bの中に変数aの中身を代入してます。このように変数とはデータを入れる箱のようなものだと言えます。
変数のルール
上記のプログラムでは変数名だけを書いています。エラーではありませんが、変数にも構文や名前の付け方のルールがあります。ここではVBAの書き方を紹介します。
Dim a as Integer ’変数aをInteger型として使うよ。と宣言する
Dim b as Integer ’変数bをInteger型として使うよ。と宣言する
a = 1
b = 4
MsgBox a + b
End Sub
Integer型については次のデータ型で紹介します。ここで知ってほしいのは変数を宣言するのに(使うことを知らせるために)Dimステートメントが使われるということです。他の言語、例えばPHPだと、$a=1; と書くだけで変数を宣言したことになります。
データ型
変数を使うのに切っても切れない関係にあるのがデータ型です。変数はデータを入れる箱でした。上記のDim a as Integer という文はデータを入れるaという箱をIntegerのサイズで使うよ。という意味になります。
データ型とは
データ型とはいわばデータのサイズや大きさを定義したものとも言えます。コンピューターの内部ではこのサイズや大きさをビット、バイトという単位で表します。参考までに、Integerのどこかにカーソルを移動してF1キーでヘルプを表示してみてください。
という説明がでてきます。Dim a as Integer で宣言した変数aの中には-32,768 ~ 32,767の数値を入れることができるという意味です。先ほどのプログラムでa=1をa=32768とするとエラーが発生します。
数字のデータ型
エクセルで扱う数値のデータ型はInteger以外にもあります。よく使うのがIntegerと、Doubleです。詳しくは「データ型 VBA」で検索して調べてください。現段階ではIntegerが整数、Doubleが不動小数点のデータ型と理解すれば問題ありません。
文字のデータ型
文字を扱うデータ型には代表的なものにStringがあります。第1回目のプログラムで
MsgBox “Hello World!!”
という命令がありました。この場合、数値と違って「Hello World!!」が”(ダブルクォーテーション)で囲まれています。VBAで文字列は”(ダブルクォーテーション)で囲むというルールがあります。他のプログラミング言語でも”(ダブルクォーテーション)や’(シングルクォート)が使われます。バリアント型
バリアント型とはVBA固有のデータ型です。1回目のプログラム中にも使われてきたのでここで説明したいと思います。変数を宣言する以下の文ですが、このように書いてもエラーではありません。
Dim a
Dim b
a = 1
b = 4
MsgBox a + b
End Sub
宣言でデータ型を明示しない、または宣言自体をしないと、変数aとbのデータ型は自動的にバリアント型になります。変数aとbには数値、文字列以外に日付や時間などを格納することができます。他のデータ型と比べて大きなサイズ(16 バイト)のため多用するとメモリ不足になったり、処理が遅くなるというデメリットがあります。
最後に復習問題
今回はこれで終了です。まだ余力があるよという場合は次の問題をどうぞ。答えは3回目の最後にあります。
問題1(基本)
上記Sub Test3()を次のように書き換えてください。
- Integer型の変数intCを追加して宣言してください。
- 変数aとbの掛け算の結果を変数intCに代入してください。
- MsgBoxの引数にintCを設定して値を表示してください。
問題2(難問)
Sub Test5()を新たに作ってください。
- Integer型の変数intAを宣言してください。
- String型の変数strAを宣言してください。
- 変数intAに任意の数値を代入してください。
- strAに”intAの中身は”を代入してください。
- MsgBoxの引数にstrAとintAを渡して変数の内容を表示してください。