2.変数と式

2-1 データの型と定数・変数

 データの分類に名前を付けたものをデータ型という.例えば,同じ数値を表す型において,整数と実数は明確に区別されており,以下の様な違いがある.
(整数)
(実数)
 VBAにおけるデータ型として,上述の整数型,実数型のほか,文字列型や,配列,構造体,バリアント型などがある.ここでは,整数型,実数型,文字型などの基本型に着目して説明を行う.
(1)データの基本型
 VBAで使用される基本型のデータ型を表2-1に示す.
表2-1 データの種類
データの種類 データ型 型宣言文字 サイズ(バイト) 値の範囲
バイト型 Byte 1 0~255
整数型 Integer % 2 -32768~32767
倍長整数型 Long & 4 -2147483648~2147483647
単精度浮動小数点数型 Single ! 4 -1.401298E-45~3.402823E38
倍精度浮動小数点数型 Double # 8 -4.94065645841247D-324~1.79769313486232D308
可変長文字列型 String $ 10+文字列長 0~2GB
固定長文字列型 String 文字列長 1~2GB
論理型 Boolean 2 True/False
10進型 Decimal 14 29桁の数値
通貨型 Currency @ 8 -922337203685477.5808~922337203685477.5807
日付型 Date 8 100年1月1日~9999年12月31日
オブジェクト型 Object 4 オブジェクトへの参照
バリアント型(数値) Variant 16 Double型と同じ
バリアント型(文字列) Variant 22+文字列長 0~2GB
(2)変数と変数名
 プログラム実行中に値を入れ替えることのできるデータ実体を変数という. 変数には英字または日本語から始まる255文字以内の文字列や数字,下線( _ )を用いて名前を付けることができる。これを変数名という.ただし,VBAの予約語を変数名に使用することはできない.
(3)型の宣言
 予め変数に記憶する値が整数タイプであるのか実数タイプであるのかといったデータ型を指定しておかなければならない.これを型宣言という.型宣言の方法は,以下に示す構文にしたがって行う.
  (変数の型宣言)
Dim
ReDim
Static    変数名 AS 型,変数名 AS 型,…
Public
Private
 型は表2-1に示したデータ型で,一般にはDimを用いて宣言する場合が多い.下の例はabcという変数を整数型,漢字という変数を単精度浮動小数点数型で宣言した例である.
  (変数の型宣言と変数名)
Dim abc AS Integer, 漢字 AS Single
ただし,動的配列はReDim,静的変数(プロシージャ使用後もローカル変数の値を保つ)はStatic,パブリック変数はPublic,プライベート変数はPrivateを用いる.
 VBAでは,変数に対して型を宣言しなくても使用可能である.その場合,変数が使用された際に宣言されたとみなされ,バリアント型として扱われる.これを暗黙の宣言という.しかし,プログラムのミスを防ぐ意味でも,型宣言を行う習慣をつけた方が良い.なお,「option Explicit」を用いると暗黙の型宣言を認めないようにすることができる.

プログラム例2-1:コマンドボタンをクリックすることによって,整数型の変数aにセルA1の値を記憶し,記憶した値をセルB1に出力するプログラムを作成する.

 (プログラム例2-1)
Private Sub CommandButton1_Click()
 Dim a As Integer
 a = Range("A1").Value
 Range("B1").Value = a
End Sub

2-2 代入文

 A と B が等しいという場合,A = B という書き方を行うが,VBA では B の値を A に代入して,変数 B を確定するといった内容になる.これを代入文と呼ぶ.一旦,確定された変数に対して,再度,別の値を代入すると,変数の値は新しい値に再確定される.

プログラム例2-2:コマンドボタンをクリックすることによって,整数型の変数a, bに,それぞれ,整数と実数を代入した後,aとbの値をセルA1とセルB1に出力するプログラムを作成してみよう.

プログラム例2-3:コマンドボタンをクリックすることによって,倍精度浮動小数点数型の変数aに代入した値をセルA1に,単精度浮動小数点数型の変数bに代入した値をセルB1に出力するプログラムを作成してみよう.

2-3 式と演算

(1)算術演算子と算術式
表2-2に算術演算で用いられる演算子を示す. 各演算子には表右端のように優先度(小さい値の方が優先度が高い) が設けられているため, 例えば,「1+2*3」というプログラムでは*が優先されて演算結果は7となる. ただし,( )がある場合はそれが優先される.
表2-2 算術演算子と優先度
演算子意味用法解釈優先度
^ べき乗 a^b ab 1
- 負符号 -a 単項演算 2
* 乗算 a*b a×b 3
/ 除算 a/b a÷b 3
\ 整数の除算 a\b 整数型の除算(※) 4
Mod 整数除算のあまり a Mod b a÷bの余り 5
+ 加算 a+b 6
- 減算 a-b 6
& 文字列の連結 a & b 7

プログラム例2-4:演算の優先度の関係を,実際にプログラムを作成して確認する.

プログラム例2-5:整数除算のプログラムを作成してこれを確認してみよう.

(2)文字列演算
 文字列を連結するための演算に対しては,連結演算子(&演算子)が用いられる.文字列 "abc" と文字列 "123"(数値ではない)を連結すると,新しい文字列 "abc123" が作られる.

プログラム例2-6:文字列演算の例を具体的にプログラミングしてみよう.

付録 数学関数

関数構文引数解説
Abs関数Abs(number) number:任意の数式(値)を指定.引数に Null 値が含まれている場合は Null 値を,値が代入される前の変数が指定されている場合は0 を返す. 引き渡した数値の絶対値を同じデータ型で返す.
Atn関数Atn(number) number:倍精度浮動小数点数型 (Double) の数値または任意の数式を指定. 指定した数値のアークタンジェントを倍精度浮動小数点数型 (Double) で返す.戻り値は、-π/2 ~π/2 の範囲の値 (単位はラジアン) になる.
Cos関数Cos(number) number:倍精度浮動小数点数型 (Double) の数値または角度を示す任意の有効な数式 (単位はラジアン) を指定. 指定した角度のコサインを倍精度浮動小数点数型 (Double) で返す.戻り値は、-1 ~ 1 の範囲の値になる.
Exp関数Exp(number) number:倍精度浮動小数点数型 (Double) の数値または任意の有効な数式を指定.number の値が 709.782712893 を超えると,オーバーフロー エラーが発生. 指数関数 (e を底とする数式のべき乗) を計算.
Int関数Int(number) number:倍精度浮動小数点数型 (Double) の数値または任意の有効な数式を指定.引数に Null 値が含まれている場合は、Null 値を返す. 指定した数値の整数部分(引数 number の小数部分を取り除いた整数値)を返す.
Fix関数Fix(number) number:倍精度浮動小数点数型 (Double) の数値または任意の有効な数式を指定.引数に Null 値が含まれている場合は、Null 値を返す. 引数に負の値を指定した場合には,Int 関数が引数 number を超えない最大の負の整数を返すのに対して,Fix 関数は引数 number 以上の最小の負の整数を返す.Fix(number) は,次の数式と等価.Sgn(number) * Int(Abs(number))
Log関数Log(number) number:引数 number には、0 を超える倍精度浮動小数点数型 (Double) の数値または任意の有効な数式を指定. 倍精度浮動小数点数型 (Double) の自然対数を返す.
Rnd関数Rnd[(number)] number の値 戻り値
< 0 常に、引数 number のシード値によって決まる同じ数値を返す
> 0 乱数系列の次の乱数を返す
= 0 直前に生成した乱数を返す
省略したとき 乱数系列の次の乱数を返す
0 以上、1 未満の範囲の単精度浮動小数点数型 (Single) の乱数を返す.引数number の値によって,Rnd 関数が返す乱数が決まる.初期シード値が変わらない限り,一連の Rnd 関数が返す乱数系列は同じになる.
Sgn関数Sgn(number) number:任意の数式を指定.
number の値 戻り値
  number > 0 1
  number = 0 0
number < 0 -1 引数に指定した値の符号をバリアント型の値で返す.
Sin関数Sin(number) number:角度を表す倍精度浮動小数点数型 (Double) の数値または任意の有効な数式 (単位はラジアン) を指定.number:任意の数式を指定. 指定した角度のサインを倍精度浮動小数点数型 (Double) の値で返す.戻り値は、-1 ~ 1 の範囲の値.
Sqr関数Sqr(number) number:0 以上の倍精度浮動小数点数型 (Double) の数値または任意の有効な数式を指定. 数式の平方根を倍精度浮動小数点数型 (Double) の値で返すト型の値で返す.
Tan関数Tan(number) number:角度を表す倍精度浮動小数点数型 (Double) の数値または任意の有効な数式 (単位はラジアン) を指定. 指定した角度のタンジェントを倍精度浮動小数点数型 (Double) の値で返す.