データの分類に名前を付けたものを
データ型という.例えば,同じ数値を表す型において,整数と実数は明確に区別されており,以下の様な違いがある.
(整数)
- 整数値(・・・,-2,-1,0,1,2,・・・・) などのように数えられる数値である.表現できる整数値は -231~231-1
(実数)
- 実数(10 進数で精度は約6~7 桁である)は1230.=0.123×104(指数部4,仮数部0.123)と表し,有効桁数は約7桁である.倍精度実数は64 ビットと使用するため,仮数部は56 ビットとなり有効桁数は約15桁である.
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 |
- (注)E38は単精度で1038,D308は倍精度で10308を意味する
(8ビット=1バイト,32ビット=4バイト)
(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に出力するプログラムを作成する.
- ①「1-5節(1)」の①~⑩の手順でコマンドボタンを作成し,コードウィンドウを表示する.
- ②(プログラム例2-1)を入力する.
- ③ Excel表示ボタンでシートを表示し,デザインモードを解除する.
- ④ セルA1に整数値を入力.ボタンをクリックすると,入力した値がセルB1に表示される.
(プログラム例2-1)
Private Sub CommandButton1_Click()
Dim a As Integer
a = Range("A1").Value
Range("B1").Value = a
End Sub
A と B が等しいという場合,A = B という書き方を行うが,VBA では B の値を A に代入して,変数 B を確定するといった内容になる.これを
代入文と呼ぶ.一旦,確定された変数に対して,再度,別の値を代入すると,変数の値は新しい値に再確定される.
プログラム例2-2:コマンドボタンをクリックすることによって,整数型の変数a, bに,それぞれ,整数と実数を代入した後,aとbの値をセルA1とセルB1に出力するプログラムを作成してみよう.
- ①「1-5節(1)」の①~⑩の手順でコマンドボタンを作成し,コードウィンドウを表示する.
- ②(プログラム例2-2)を入力する.
- ③ Excel表示ボタンでシートを表示し,デザインモードを解除する.
- ④ コマンドボタンをクリックすると,セルA1とセルB1にaとbの値がプログラム例2-2の結果に示すように表示される.
(プログラム例2-2)
Private Sub CommandButton1_Click()
Dim a As Integer, b As Integer
a = 123
b = 3.65
Range("A1").Value = a
Range("B1").Value = b
End Sub
(プログラム例2-2の結果)
ここで,セルA1に表示された値は代入した123であるが,セルB1に表示された値は代入した3.65ではなく,四捨五入された4となっている.なお,bに記憶される値として切り捨てが行われる言語もあるので注意が必要である.
プログラム例2-3:コマンドボタンをクリックすることによって,倍精度浮動小数点数型の変数aに代入した値をセルA1に,単精度浮動小数点数型の変数bに代入した値をセルB1に出力するプログラムを作成してみよう.
- ①「1-5節(1)」の①~⑩の手順でコマンドボタンを作成し,コードウィンドウを表示する.
- ②(プログラム例2-3)を入力する.
- ③ Excel表示ボタンでシートを表示し,デザインモードを解除する.
- ④ ボタンをクリックすると,セルA1にaの値が,セルB1にbの値が以下のように表示される.
(プログラム例2-3)
Private Sub CommandButton1_Click()
Dim a As Double, b As Single
a = 3.141592654
b = 3.141592654
Range("A1").Value = a
Range("B1").Value = b
End Sub
(プログラム例2-3の結果)
ここで,セルA1に表示された値は,代入した値がすべて表示されている.一方,セルB1に表示された値は,代入した3.141592654ではなく,3.141592741となっている.これは,先にも述べたように,変数bのデータ型が,Single(単精度浮動小数点数型)であるため,記憶できる有効桁数が7桁となり,それ以上の値が切り捨てられたことによる.
(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:演算の優先度の関係を,実際にプログラムを作成して確認する.
- ①「1-5節(1)」の①~⑩の手順でコマンドボタンを作成し,コードウィンドウを表示する.
- ②(プログラム例2-4)を入力する.
- ③ Excel表示ボタンでシートを表示し,デザインモードを解除する.
- ④ コマンドボタンをクリックすると,セルA1に「7」が,セルA2に「9」が表示される.
(プログラム例2-4)
Private Sub CommandButton1_Click()
Dim num1 As Integer, num2 As Integer
num1 = 1 + 2 * 3
num2 = (1 + 2) * 3
Range("A1").Value = num1
Range("A2").Value = num2
End Sub
プログラム例2-4はかけ算の例であったが,次に,整数どうしの割り算について考えてみる.VBAでは,整数どうしの割り算として( / )演算子を用いると,結果は四捨五入された整数値.一方,割り算の演算子として( \ )を用いると切り捨てが行われる.これを整数除算という.
プログラム例2-5:整数除算のプログラムを作成してこれを確認してみよう.
- ①「1-5節(1)」の①~⑩の手順でコマンドボタンを作成し,コードウィンドウを表示する.
- ②(プログラム例2-5)を入力する.
- ③ Excel表示ボタンでシートを表示し,デザインモードを解除する.
- ④ ボタンをクリックすると,セルA1に「1」が,セルA2に「0」が,セルA3に「1」が表示される.
(プログラム例2-5)
Private Sub CommandButton1_Click()
Dim num1 As Integer, num2 As Integer, num3 As Integer
num1 = 2 / 3
num2 = 2 \ 3
num3 = 10 \ 3 * 3
Range("A1").Value = num1
Range("A2").Value = num2
Range("A3").Value = num3
End Sub
(プログラム例2-5の結果)
num1は四捨五入された整数値であるから,2/3 であれば,1となる.また,num2は切り捨てが行われるので,0となる.一方,num3は,演算の優先度にしたがい3*3が計算され,その結果の9で10に対する整数除算を行うので,結果が1となる.
(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) の値で返す. |