VBScript 変数
VBScript 変数
VBScript の変数の型は、すべてバリアント型(Variant)になる。
バリアント型(Variant)の特徴は以下のとおり。
- 初期値は Empty となる。
- どんなデータ型でも格納できる。
- 値が格納されたら、その値のデータ型で保持される。
たとえば、整数(Integer)を格納した場合、その Variant は Integer として扱われる。
Variant の内部データ型
Variant に値を格納したとき、どのデータ型になるのか。
サンプル | VarType 関数の戻り値 | TypeName 関数の戻り値 | 備考 |
---|---|---|---|
Dim a |
0 | Empty | 変数の初期値は Empty になる。 |
a = Null |
1 | Null | |
a = 1 |
2 | Integer | |
a = 32768 |
3 | Long | Integer の範囲を超えたため Long になる。 |
a = 2147483648 |
5 | Double | Long の範囲を超えたため Double になる。 |
a = 1.0 |
5 | Double | Single で扱える範囲の実数を格納しても Single にはならなかった。 |
a = CSng(1) |
4 | Single | Single にするときはCSng 関数で明示的に型変換する。 |
a = CCur(1) |
6 | Currency | Currency にするときはCCur 関数で明示的に型変換する。 |
a = #1993-05-31# a = #10:08:32# a = #1993-05-31 10:08:32# |
7 | Date | |
a = "文字列" |
8 | String | |
Set a = CreateObject("Scripting.Dictionary") |
9 | Dictionary | |
Set a = CreateObject("ADODB.Stream") |
9 | Stream | |
Set a = CreateObject("Excel.Application") |
8 | Application | VarType 関数からなぜか 8 が返される。8 は文字列なのだが……。 |
a = True a = False |
11 | Boolean | |
a = CByte(&H00C9) |
17 | Byte | Byte にするときはCByte 関数で明示的に型変換する。 |
a = Array(1,2,3) |
8204 | Variant() |
計算結果が元のデータ型を超えると自動で拡張される
Byte
、Integer
、Long
、Single
を格納している Variant に対して計算を行い、結果が元のデータ型の範囲を超えた場合、結果は Variant 内で次に大きいデータ型に昇格される。
Byte
→Integer
Integer
→Long
Long
またはSingle
→Double
Currency
、Double
→ 実行時エラー
例1 Byte → Integer
Dim a, b, c
a = CByte(128)
b = CByte(128)
c = a + b
WScript.Echo TypeName(c)
' → Integer
例2 Integer → Long
Dim d, e, f
d = 32767 'Integerの最大値
e = 1
f = d + e
WScript.Echo TypeName(f)
' → Long
例3 Long → Double
Dim g, h, i
g = 2147483647 'Longの最大値
h = 1
i = g + h
WScript.Echo TypeName(i)
' → Double
例4 Single → Double
Dim j, k, l
j = CSng(340282350000000000000000000000000000000) 'Singleの最大値 3.4028235E+38
k = CSng(1)
l = j + k
WScript.Echo TypeName(l)
' → Double
例5 Double の計算でオーバーフロー
Dim m, n, o
m = 1.79769313486231E+308
n = 0.00000000000001E+308
o = m + n
WScript.Echo TypeName(o)
' → 実行時エラー #6 - オーバーフローしました。
例6 Currency の計算でオーバーフロー
Dim p, q, r
p = CCur(922337203685477) 'Currencyの最大値 922,337,203,685,477.5807
q = 1
r = p + q
WScript.Echo TypeName(r)
' → 実行時エラー #6 - オーバーフローしました。
Empty の扱い
変数が Empty かどうか判定するときはIsEmpty
関数を使う。
e.g. 以下のコードを実行すると、メッセージ「Empty です」が表示される。
Dim val
If IsEmpty(val) Then
MsgBox "Empty です"
Else
MsgBox "Empty ではありません"
End If
Empty が数値として扱われる場合は 0 となる。
文字列として扱われる場合は空文字(““)となる。
e.g. 以下のコードを実行すると、メッセージ「0 です」に続けて「空文字です」が表示される。
Dim val
If IsEmpty(val) Then
If val = 0 Then
MsgBox "0 です"
End If
If val = "" Then
MsgBox "空文字です"
End If
Else
MsgBox "Empty ではありません"
End If
アカウントを作成 して、もっと沢山の記事を読みませんか?
この記事が気に入ったら ことりと さんを応援しませんか?
メッセージを添えてチップを送ることができます。
この記事にコメントをしてみませんか?