変数と型について
今回の目標
- 変数の型の概念について理解する
- 変数を使用できるようにする
- 変数と文字列の差について理解する
説明
なお、このページは更新する可能性があります。
変数とは
変数とは、一時的に覚えさせておきたいデータに名前をつけてプログラム内に保存したものを指します。
覚えさせたデータ(=変数)は値を変更してセルに代入することができます。
変数は特別な指定をしない限り、プログラムの実行時に作成され、プログラムの終了時に破棄されます。
現時点では変数を使用しなくても問題ないプログラムのみを説明していますが、今後は変数を使わなければならない構文がしばしばあります。
変数の宣言を強制させる
これは行わなくても問題なく変数を用いたプログラムを実行することができますが、必ず行ってください。本格的にプログラムを作成し始めたときにこれを行っておかないと、致命的なエラーが発生する可能性が高まってしまいます。
1.VBEから「ツール」→「オプション」を選択してください。
2.「変数の宣言を強制する」を選択して、OKボタンを押下すれば完了です。
すると、標準モジュールを追加したときに自動的に[Option Explicit]と記載されています。この文言を記載する時はモジュールの最初にないとエラーになりますので、注意しましょう。(=[Option Explicit]より、下の行にプログラムを書いてください)
変数の型
変数を作成するときには、『型』を指定することができます。どのようなデータを入れたいかによって変数の型を変える必要があります。
変数の型は数多く存在しており、すべてを覚えることは難しいと思います。そのため、一般的に使用される型を書き表にまとめました。
データ型 | 型名 | 範囲 |
---|---|---|
ブーリアン型 | Boolean | True または False |
整数型 | Integer | -32,768 ~ 32,767 |
長整数型 | Long | -2,147,483,648 ~ 2,147,483,647 |
単精度浮動小数点数型 | Single | 負の値の場合: -3.402823E38 ~ -1.401298E-45 正の値の場合: 1.401298E-45 ~ 3.402823E38 |
倍精度浮動小数点数型 | Double | 負の値の場合: -1.79769313486231E308 ~ -4.94065645841247E-324 正の値の場合: 4.94065645841247E-324 ~ 1.79769313486232E308 |
通貨型 | Currency | -922,337,203,685,477.5808 ~ 922,337,203,685,477.5807 |
日付型 | Date | 100 年 1 月 1 日 ~ 9999 年 12 月 31 日 |
文字列型 | String | 0 ~ 約 20 億(可変長) 1 ~ 約 65,400(固定長) |
バリアント型 | Variant | 最大で Double の範囲までの任意の数値 or 可変長 String と同じ範囲 |
※1 Microsoft デベロッパー センターより一部引用
※2 上記の型の他にオブジェクト型が存在します(詳細は多すぎて書ききれません)。
頻繁に使用する型まとめ
使用頻度が高い型をは次の通りです。
- 整数を使用したいとき → Long型
- 文字列を使用したいとき → String型
- 小数点を含む数値を使用したいとき → Double型
- 整数or文字列 or 小数点を使用したいとき → Variant型
Variant型は何でも格納できるため、初心者にはオススメの型です。
しかし、マクロの作成に慣れたら、Long型等の型を使用してください。
型の使用方法を限定しているのは、プログラムミスを防ぐと言うことが理由の1つに挙げられます。
具体的には、年齢(数値)を格納するための変数を作成したにもかかわらず、誤って名前(文字列)を格納しようとするとその時点でエラーが発生します。エラーがすぐに見つかれば、運用(実際に使用する)時になって不具合に気付くということは防げます。
変数の作成
変数は次のように宣言します。
Dim 変数名 As 型名
文字列型の変数の宣言は次のようにします。
Dim Chr As String
長整数型の変数の宣言は次のようにします。
Dim Num As Long
Chr と Numは変数名です。変数名とは、作成した変数の名前のことです。"Num"でなく、"Suuti"や"Kazu"の他、"数値"、"文字1"など日本語で作成することもできます。変数名はアルファベット、日本語、半角アンダーバー、数字を使って作成できます。ただし変数名の最初が数字から始まってはダメとルールがあります。自作関数名や予約語でも変数を作成できない等のルールもありますが、まずは赤字の部分を覚えてください。
変数に値を代入・取得する
変数に値を代入する
文字列の代入の例です。
'変数「Chr」に文字列『テスト』を代入するだけのプログラム
Sub Sample_Variable1_2()
Dim Chr As String ' ・・・ ①
Chr = "テスト" ' ・・・ ②
End Sub
①は、変数「Chr」を作成しています。
②は、①で作成した変数「Chr」に文字列『テスト』を代入しています。
変数に数値を代入するときも同様に代入できます。
'変数「Num」に数値『10』を代入するだけのプログラム
Sub Sample_Variable1_1()
Dim Num As Long
Num = 10
End Sub
変数の値を取得する
変数に格納した値を取得して、セルに代入することもできます。
次のサンプルを見てください。
Sub Sample_Variable2_1()
Dim str As String '・・・①
str = "テスト" '・・・②
Range("A1") = str '・・・③
End Sub
①で変数「str」を作成します。
②で作成した「str」に文字列"テスト"を代入しています。
③で変数「str」をセルa1に入れ込みます。
実行すると、セルA1には、値"テスト"が代入されます。Chrという変数(箱)に入っていた値をコピーして、セルA1に代入したからです。
変数の値は代入後もなくならない
セルに代入を終えた変数はその後、どうなるのでしょうか。
次のサンプルを実行してください。
Sub Sample_Variable2_2()
Dim Num As Long
Num = 20
Range("A1") = Num
Range("A2") = Num
End Sub
A1とA2に数値20が格納されます。このことから、1度代入した変数もその値はなくならないということが分かります。
変数の値を別の変数に代入する
変数の値を別の変数に代入することもできます。
Sub Sample_Variable2_3()
Dim age1 As Long
Dim age2 As Long
age1 = 40
age2 = age1
Range("A3") = age2
End Sub
コラム(変数に初期値を与える?)
このコラムは、ExcelVBA以外のプログラミング言語を既に学習された方向けです。プログラミング自体なれていない方は読み飛ばしてください。
JavaやC#では、初期値(変数作成と同時に値を設定すること)を与えることができますが、ExcelVBAではこれができないようです。強いて挙げるならExcelVBAでも固定値(値を変更できない変数)を設定する時だけです。変数の宣言時に値を設定することができます。
変数と文字列
Sub Sample_Variable4()
Dim Chr As String
Chr = "ABC"
Range("A5") = "Chr" ' セルA5:文字列「Chr」が代入される
Range("A6") = Chr ' セルA6:変数「Chr」の中身(ABC)が代入される
End Sub
コメントにもある通り、セルのA5には文字列"Chr"が代入されます。セルのA6には、変数Chrの中身である文字列"ABC"が代入されます。この差は、Chrに " で囲われているかどうかです。 " で囲われている場合は、文字列として、そのままChrが代入され、 " が内場合は変数として扱われます。
慣れるまでは大変かもしれませんが、割り切って覚えるようにしましょう。
確認テスト
次の問いに答えなさい。
-
長整数型の変数"Num"を作成しなさい。
【解答例】
Sub Test_Variable1() Dim Num As Long End Sub
-
文字列型の変数"文字"を作成しなさい。
【解答例】
Sub Test_Variable2() Dim 文字 As String End Sub
-
倍精度浮動小数点数型の変数"Avr"を作成しなさい。
【解答例】
Sub Test_Variable3() Dim Avr As Double End Sub
-
文字列型の変数"Str"を作成し、文字"Str"を代入しなさい。
【解答例】
Sub Test_Variable4() Dim Str As String Str = "Str" End Sub
-
長整数型の変数"Num2"を作成し、"Num2"に10を代入、さらに変数"Num2"をセルB3に代入しなさい。
【解答例】
Sub Test_Variable5() Dim Num2 As Long Num2 = 10 Cells(3, 2) = Num2 End Sub