【2/17】今年は「濃厚」技術トーク!@ITメールセミナー スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷
   
基礎解説
チェック式 WSH入門 第5回

2.形名の調査と数値データ型

Microsoft MVP
Visual Developer - Scripting
牟田口 大介
2006/09/22

型名を調べる〜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関数など変換関数については後ほど述べる。


 INDEX
  [基礎解説]チェック式 WSH入門
  第5回 データ型について理解を深めよう
    1.VBScriptのデータ型
  2.形名の調査と数値データ型
    3.ブール・データ型
    4.暗黙の型変換
    5.明示的な型変換と特殊な値

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

ホワイトペーパーTechTargetジャパン

Windows Server Insider フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)

- PR -
- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  企業の仮想化に足りない“発想”とは?
仮想化運用管理のキモは意外なところに!

New!
  操作もマニュアルも分かりやすい!
ユーザー視点で開発されたPC管理ツール

New!
  仮想化すればコストは削減できるか?
仮想化に必要な「3つの視点」を解説する

  セキュリティを知り尽くす上野氏が登壇!
@ITメールソリューションLive! in Tokyo

  運用管理の課題を“2つの観点”から分析
ユーザー満足度の高い「仮想環境」とは?

  世界に通用するストレージの作り方とは?
製品に込めた思いを富士通の開発者に聞く

  OSSで手間も時間も、障害も減った――
「マピオンの事例」オープンソース活用法

  「ノートPCの持ち出し禁止」で大丈夫?
情報漏えいを防ぐ管理手法とインフラは?

  1日の処理を1秒に――MySQLの達人が語る
「コスト削減」できるチューニング

  ドキュメント作成を自動化して、SEの作業
効率を大幅アップ! Visio 2007の魅力

  急速に広がるHyper-Vでのサーバ仮想化
そのベストプラクティスをデルが解説

  @IT主催セミナーで語られた、「担当者に
求められるセキュリティ対策」をレポート

  @IT「Windows 7」 特設サイトオープン!
最新情報・移行ノウハウを公開しています