連載
» 2006年09月22日 00時00分 公開

基礎解説 演習方式で身につけるチェック式WSH超入門:第5回 データ型について理解を深めよう (2/5)

[牟田口大介(Microsoft MVP Visual Developer - Scripting),著]

型名を調べる〜TypeName関数

 VBScriptのデータ型について述べる前に、先にデータ型の調べ方について説明しておこう。

 すでに述べたように、VBScriptでは変数宣言と同時に変数の型を宣言することができず、変数に値を代入した時点でVBScriptが内部的に型を決定する。そのため、実際にどの型として扱われているのかの調査が必要になることがある。また、関数などの戻り値がどういう型を持っているかを調べたいこともある。VBScriptでは、変数の型を調べるのにVarType関数あるいはTypeName関数を用いる。このうち、TypeName関数は実際の型名が文字列として得られるので、よく用いられる。

 TypeName関数の使用方法は、調べたい変数を引数に与えるだけである。例えば次のような使い方をする。

Option Explicit
Dim intTest
intTest = 1
MsgBox "変数名:intTest" & vbCrLf & _
"値:" & intTest & vbCrLf & _
"型:" & TypeName(intTest)

 このスクリプトを実行すると、次のようなメッセージ・ボックスが表示される。

TypeName関数の実行例
変数intTestの型名をTypeName関数を使って表示している。

 この実行例では、intTestという変数に、1という値を代入したことにより、内部的には整数型(Integer)として扱われていることが分かる。

 ではこれからデータ型の詳細を順番に見ていこう。

整数値を扱うデータ型

 整数値を扱うデータ型には整数型(Integer)、長整数型(Long)、バイト型がある。そのうちバイト型は、通常、配列(次回解説予定)の1つであるバイト配列として用いるのだが、VBScript単独ではバイト配列が扱えないので、ここでは取り上げない。

 整数型、長整数型の違いは扱う数値範囲(けた数)の違いであることが表からお分かりいただけると思う。

 先ほどTypeName関数の例で述べたように、1などの-32,768〜32,767の範囲にある数値リテラル(数値文字列表現)を変数に代入すると整数型(Integer)として扱われる。

 整数型は32,767より大きい整数を扱えないので、それより大きい整数(-2,147,483,648〜2,147,483,647)を代入するとLong型として扱われる。次の例を見てもらいたい。

Option Explicit
Dim intIntMax
intIntMax = 32767
MsgBox "変数名:intIntMax " & vbCrLf & _
"値:" & intIntMax & vbCrLf & _
"型:" & TypeName(intIntMax)
Dim lngNext
lngNext = intIntMax + 1
MsgBox "変数名:lngNext " & vbCrLf & _
"値:" & lngNext & vbCrLf & _
"型:" & TypeName(lngNext)

 このサンプルを実行すると次のようになる。

IntegerとLongの違い
Integerの最大値(32767)はInteger型、それより1大きい値(32768)はLong型となる。

 32,767という整数型の最大値はIntegerとして扱われているが、それより1大きい数(32,768)はLongとして扱われる。

実数値を扱うデータ型

 実数とは整数だけでなく小数も含めた、いわゆる普通の数のことである。

 VBScriptで実数値を扱うデータとしては単精度浮動小数点型(Single)、倍精度浮動小数点型(Double)、通貨型(Currency)がある。

 このうちSingleとDoubleは「浮動小数点」という聞き慣れない言葉が含まれていてとっつきにくいかもしれない。浮動小数点数とは、数値を、各けたの値の並びである「仮数部」と、小数点の位置を表す「指数部」に分けて表現する方法であり、大きな値や、逆に小さな値を表現するのに適したデータ型である。小数点以下の数値を持つデータ表現方法として一般的である。SingleとDoubleの違いは、表現できる数値の範囲がSingleよりDoubleの方が広い(Eの後の数値が大きい)のと、有効数字のけた数がSingleよりDoubleの方が多い(Eの前の数が多い)という点である。

Option Explicit
Dim dblDecimal
dblDecimal = 1.35
MsgBox "変数名:dblDecimal " & vbCrLf & _
"値:" & dblDecimal & vbCrLf & _
"型:" & TypeName(dblDecimal)

Dim dblBigInteger
dblBigInteger= 12345678901234567890
MsgBox "変数名:dblBigInteger " & vbCrLf & _
"値:" & dblBigInteger & vbCrLf & _
"型:" & TypeName(dblBigInteger)

 このスクリプトを実行すると次のように表示される。

Doubleとして扱われる数
小数点を含む数値あるいはLong型で収まりきれない大きな数はDouble型として扱われる。

 このように、小数点を含んだり、Longの範囲を超える極めて大きな数を格納するとDoubleとして扱われる。後者の例は、有効数字が15けたで、指数部分(10の何乗かを表す部分)が「+19(10の19乗)」となっている。VBScriptの数値演算関数のうち、小数点を含む数を戻り値として返す関数の多くはDoubleを返すうえ、先ほどの例のように小数点を含む数値をリテラルとして用いるとDoubleとして扱われるので、VBScriptにおいてSingleを使うことはまれであろう。

 ここでは詳説しないが、これら浮動小数点数は数値演算子や関数を用いた演算において、誤差が発生する可能性がある。そのため誤差が発生すると困るが小数点以下の数値を扱いたいという場合には通貨型(Currency)を用いる。通貨型は本来、その名のとおり通貨の計算を厳密に行うためのデータ型なのだが、実際は固定小数点数のデータ型として使える。扱える小数部と整数部の範囲は狭いが、誤差のない小数演算が可能である。ただし、通貨型は数値リテラルの宣言だけでは使用できないので、CCur関数を用い、数値リテラルに対し明示的な型変換を施して利用する必要がある。CCur関数など変換関数については後ほど述べる。

【更新履歴】

【2008/09/05】実数値を扱うデータ型」のサンプル・リストの一番最後の行において、「TypeName(dblBigInteger)」とするべきところを、間違って「TypeName(dblDecimal)」としておりました。お詫びして訂正いたします。


Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。