ある型から別の型に値を変換することを型変換という。型変換には関数を用いた明示的な型変換と、VBScriptが値を判断して行われる暗黙の型変換が存在する。
数値同士の型変換は、数値演算するときに暗黙的に行われることが多い。「整数値を扱うデータ型」の項で説明したサンプルは、本来ならInteger同士の足し算の結果はIntegerとして返されるのだが、Integerの範囲を超えたため、自動的にLongに変換され変数に格納されている。
また、例えばIntegerとDoubleという異なった型を組み合わせて数値演算すると、結果はDoubleになる。これは、計算する型が異なる場合は、よりカバーする範囲の広い型(Integerに比べてDoubleは広い範囲をカバーする)に型変換されてから計算されるためである。以下のサンプルを実行してもらいたい。
Dim intNumber, dblNumber, dblResult
intNumber = 1 'Integerの値
dblNumber = 1.35 'Doubleの値
dblResult = intNumber + dblNumber
MsgBox "変数名:dblResult " & vbCrLf & _
"値:" & dblResult & vbCrLf & _
"型:" & TypeName(dblResult)
結果は次のようになる。
数値から文字列の暗黙の型変換についてはこれまでにも何度か登場してきた。例えば、
Option Explicit
Dim lngNumber, strMessage
lngNumber = 838861
strMessage = lngNumber & "枚のコインを購入する。"
MsgBox strMessage
のように、Longの値とStringの値を文字列連結演算子&で結合すると、Longの値がStringに型変換され、結果として1つのStringの値になる。
また逆に、文字列から数値への型変換も暗黙的に行われる場合がある。
Option Explicit
Dim strNumber, numPrice, strMessage
strNumber = InputBox("購入するコインの枚数を入力してください。(コインは1枚20円です)")
numPrice = strNumber * 20
strMessage = strNumber & "枚のコインは、" & numPrice & "円です。"
MsgBox strMessage
この例では、InputBox関数で数値を入力すると、その値を20倍するという数値演算を行っているが、その際、StringからLongやIntegerなどに型変換が行われ、適切に処理される(もちろん、InputBoxに適切な数値を入力する必要がある)。
文字列から数値への型変換には1つ注意点がある。それは、数値が含まれたString値の足し算をする場合である。実は、VBScriptの+演算子には2つの意味がある。1つは数値の足し算を意味する算術演算子で、もう1つは文字列の連結を意味する文字列連結演算子なのである(&と同等)。次の例を見てもらいたい。
Option Explicit
Dim strX, strY, numSum
strX = InputBox("Xの値を入力してください。")
strY = InputBox("Yの値を入力してください。")
numSum = strX + strY
MsgBox strX & "+" & strY & "=" & numSum
このサンプルを実行すると次のようになる。
この例だと、100+50なのだから、結果は150となるべきなのに、100と50が文字列のまま扱われ、“10050”という文字列が返されてしまっている。これは、+算子は文字列同士を扱う場合は文字列を連結するという特性を持っているためである(ただし、片方が数値で、片方が数値の含まれた文字列の場合だと、数値同士の足し算になる)。これは文字列型がうまく数値型に変換されない例である。
Copyright© Digital Advantage Corp. All Rights Reserved.