変数について
今回の目標
説明
なお、このページは更新する可能性があります。
変数とは
変数とは、一時的に覚えさせておきたいデータに名前をつけてプログラム内に保存したものを指します。
覚えさせたデータ(=変数)は値を変更してセルに代入することができます。
変数は特別な指定をしない限り、プログラムの実行時に作成され、プログラムの終了時に破棄されます。
現時点では変数を使用しなくても問題ないプログラムのみを説明していますが、今後は変数を使わなければならない構文がしばしばあります。
変数の宣言を強制させる
これは行わなくても問題なく変数を用いたプログラムを実行することができますが、必ず行ってください。本格的にプログラムを作成し始めたときにこれを行っておかないと、致命的なエラーが発生する可能性が高まってしまいます。
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 と同じ範囲 |
Microsoft デベロッパー センターより一部引用
頻繁に使用する型まとめ
まとめると下記のようになります。
● 整数or文字列or小数点を使用したいとき | ・・・・・ | Variant型 |
● 整数を使用したいとき | ・・・・・ | Long型 |
● 文字列を使用したいとき | ・・・・・ | String型 |
● 小数点を含む数値を使用したいとき | ・・・・・ | Double型 |
勘の良い方は「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 Chr As String '・・・①
Chr = "テスト" '・・・②
Cells(1, 1) = Chr '・・・③
End Sub
①で変数「Num」を作成し、②で作成した「Chr」に文字列"テスト"を代入しています。今回はさらに変数ChrをセルA1に代入しています。実行すると、セルA1には、値"テスト"が代入されます。Chrという変数(箱)に入っていた値をコピーして、セルA1に代入したからです。
変数の値は代入後もなくならない
セルに代入を終えた変数はその後、どうなるのでしょうか。
次のサンプルを実行してください。
Sub Sample_Variable2_2()
Dim Num As Long
Num = 20
Cells(1, 1) = Num
Cells(2, 1) = Num
End Sub
A1とA2に数値20が格納されます。このことから、1度代入した変数もその値はなくならないということが分かります。
変数の値を別の変数に代入する
変数の値を別の変数に代入することもできます。
Sub Sample_Variable2_3()
Dim age1 As Long
Dim age2 As Long
age1 = 40
age2 = age1
Cells(3, 1) = age2
End Sub
コラム(変数に初期値を与える?)
このコラムは、ExcelVBA以外のプログラミング言語を既に学習された方向けです。プログラミング自体なれていない方は読み飛ばしてください。
JavaやC#では、初期値(変数作成と同時に値を設定すること)を与えることができますが、ExcelVBAではこれができないようです。強いて挙げるならExcelVBAでも固定値(値を変更できない変数)を設定する時だけです。変数の宣言時に値を設定することができます。
変数と文字列
Sub Sample_Variable4()
Dim Chr As String
Chr = "ABC"
Cells(5, 1) = "Chr" ' セルA5:文字列「Chr」が代入される
Cells(6, 1) = Chr ' セルA6:変数「Chr」の中身(ABC)が代入される
End Sub
コメントにもある通り、セルのA5には文字列"Chr"が代入されます。セルのA6には、変数Chrの中身である文字列"ABC"が代入されます。この差は、Chrに " で囲われているかどうかです。 " で囲われている場合は、文字列として、そのままChrが代入され、 " が内場合は変数として扱われます。
慣れるまでは大変かもしれませんが、割り切って覚えるようにしましょう。
確認テスト
次の問いに答えなさい。
- 長整数型の変数"Num"を作成しなさい。
- 文字列型の変数"文字"を作成しなさい。
- 倍精度浮動小数点数型の変数"Avr"を作成しなさい。
- 文字列型の変数"Str"を作成し、文字"Str"を代入しなさい。
- 長整数型の変数"Num2"を作成し、"Num2"に10を代入、さらに変数"Num2"をセルB3に代入しなさい。
関連リンク
- 次ページ:条件分岐とは
- 前ページ:コメントアウト
- 変数作成:特殊な変数の宣言について
- 代入関連ページ1:数値と文字列の代入について 代入関連ページ2:代入時に"Set"を伴う型について(現在作成中です)