変数を使用する - Excel VBA プログラミング

PROGRAM


変数を使用する

VBA では、変数を用意して、その中に値を自由に保存して計算することができるようになっています。

変数は特に何も準備をしなくても、何でも入る Variant 型の変数として使用することができるので、たとえば次のようにして、"値段" という名前の変数に、数値の 100 をセットすることができます。

値段 = 100

ただ、どんな名前でも使えて、どんな値でも保存できると、何かとプログラミングミスの元になるように思います。

変数によって保存できる値の種類を限定したい場合には、次のようにして、変数の宣言を行ってから、それを使うようにします。

Dim 値段 As Long

このように Dim ステートメントを使って、その後に変数名と As を挟んで変数の型を記すことで、その変数に保存できる値の種類を限定することができるようになります。

上の例では 32 ビット数値型の変数となりますけど、このようにすることで、たとえば文字列などの予期しない型が保存されようとした場合にはエラーとなってくれるので、どこかでプログラミングミスをして変な値が混入されたりすることを、いくぶん防ぐことができるようになると思います。

VBA で宣言できるデータ型には、主に次のようなものがあります。

変数の型 用途 代入できる値の例
String 可変長文字列型です。
初期値は空文字列 (vbNullString) です。
"文字列"
二重引用符で文字列を括ります。文字列内に二重引用符が含まれる場合は、それを二つ続けて ( "" ) 入力します。
Long 32 ビット整数型です。
-2,147,483,648 から 2,147,483,647 までの数値を表現できます。
初期値は 0 です。
1000
Long 型を表す "&" を数値の後ろに付けて 1000& というように表現することもできます。
Date 日付日付型です。
初期値は 1899/12/30 00:00:00 です。
#2011/07/18 10:19:14#
"2011/07/18 10:19:14" というように文字列として代入しても、自動的に日付時刻型に変換してくれます。
Double 倍精度浮動小数点数です。
仮数を 52 ビット整数で、指数を 11 ビット整数で表現できます。
初期値は 0.0 です。
125.8
Double 型を表す "#" を数値の後ろに付けて 125.8# というように表現することもできます。
Variant 任意の値を格納することができます。
初期値は Empty です。
 
Boolean 真偽値を格納することができます。
真は Trune (-1) で表現し、偽は False (0) で表現します。
初期値は False です。
True
Integer 16 ビット整数型です。
-32,768 から 32,767 までの数値を表現できます。
初期値は 0 です。
1000
Integer 型を表す "%" を数値の後ろに付けて 1000% というように表現することもできます。
LongLong 64 ビット整数型です。
-9,223,372,036,854,775,808 から 9,223,372,036,854,775,807 までの数値を表現できます。
初期値は 0 です。
1000000
ただしあまりにも大きい数値の場合、Excel 2010 (x64) では、たとえば 9223372036854775807 等とすると、浮動小数点表記の 9.22337203685478E+18 に変換されてしまい、代入された値に誤差が生じてしまいました。このような場合、文字列 "9223372036854775807" で代入してあげることで、誤差なく値を代入させることができました。
Byte 8 ビット符号なし整数型です。
0 から 255 までの数値を表現できます。
規定値は 0 です。
100
Single 単精度浮動小数点数です。
仮数を 23 ビット整数で、指数を 8 ビット整数で表現できます。
初期値は 0.0 です。
125.8
Single 型を表す "!" を数値の後ろに付けて 125.8! というように表現することもできます。
Currency 64 ビットの通貨型です。
-922,337,203,685,477.5808 から 922,337,203,685,477.5807 までの数値を表現できます。
初期値は 0 です。
128.45
Currency 型を表す "@" を数値の後ろに付けて 128.45@ というように表現することもできます。
ただしあまりにも大きい数値の場合、Excel 2010 (x64) では、たとえば 922337203685477.5807 等とすると、倍精度浮動小数点を意味する 922337203685478# に変換されてしまい、代入された値に誤差が生じてしまいました。このような場合、文字列 "922337203685477.5807" で代入してあげることで、誤差なく値を代入させることができました。
Object オブジェクト型です。
クラスのインスタンスや COM コンポーネントのインスタンスをセットできます。
初期値は Nothing です。
値を代入する際には Set ステートメントを用いて代入します。
たとえば Class1 というクラスのインスタンスであれば、Set obj = New Class1 というような形になります。

 

また、変数の宣言を強制することで、宣言されていない変数を使用できないようすることもできます。

Option Explicit

この行を予め、各 VBA コード(モジュール等)の一番最初に 1 つ記載してあげることで、Dim ステートメントによる変数宣言をしていない変数を使おうとするとエラーとなります。

こうすることで、たとえば "値段" という変数名を間違えて "価格" としてしまったり、"ねだn" というように打ち間違えてしまった場合に、実行時にエラーとなってくれます。打ち間違えによるバグは、なかなか原因を発見できずに苦労することが多いように思うので、この "Option Explicit" は各コードに付けておくのがお勧めです。

 

このほかにも、独自に定義したクラスや、参照設定などで取り込んだクラスなども、変数の型として使用することができます。

たとえば "Microsoft Scripting Runtime" ライブラリで用意されている連想配列型のクラス "Scripting.Dictionary" を使用するような場合には、次のようにして、変数宣言とその代入を行います。

Dim 値段表 As Scripting.Dictionary

 

Set 値段表 = New Scripting.Dictionary

このようにクラスを変数に代入する場合には、Set ステートメントを使う必要があります。また、クラスを使用するためにはそのインスタンスを生成しなくてはいけないため、New ステートメントを用いて Scripting.Dictionary クラスのインスタンスを生成しています。

インスタンスの生成については、初めて使用するときに自動的に生成されるようにしたい場合には、次のようにすることもできます。

Dim 値段表 As New Scripting.Dictionary

こうすることで、上記の例では、初めて "値段表" という変数の値を使うタイミングで、自動的に Scripting.Dictionary のインスタンスが生成されるようになります。

 


[ もどる ]