第一引数に指定した変数の型を示す数値を返す、もしくは第ニ引数に指定した型に変換します。
VARTYPE関数は、VAR_ARRAY(8192)を単独で返すことはありません。この値は常にデータ型を表す他の値との和で返され、そのデータ型の要素を持つ配列であることを示します。
例えば4バイト整数を配列の持つ場合、VAR_INTEGER(3) + VAR_ARRAY(8192) = 8195を返します。
それぞれの型が取りうる範囲については変数を確認してください。
- 構文
- VARTYPE( 変数, 変換タイプ )
- 戻り値
- VAR_EMPTY (0)
- Empty
- VAR_NULL (1)
- Null
- VAR_SMALLINT (2)
- 2バイト整数(符号付)
- VAR_INTEGER (3)
- 4バイト整数(符号付)
- VAR_SINGLE (4)
- 単精度浮動小数点値
- VAR_DOUBLE (5)
- 倍精度浮動小数点値
- VAR_CURRENCY (6)
- 通貨型
- VAR_DATE (7)
- 日付型
- VAR_DISPATCH (9)
- オブジェクト
- VAR_ERROR (10)
- エラー値
- VAR_BOOLEAN (11)
- ブール型
- VAR_VARIANT (12)
- バリアント
- VAR_UNKNOWN (13)
- 未定義のオブジェクト
- VAR_SBYTE (16)
- 1バイト整数(符号付)
- VAR_BYTE (17)
- 1バイト整数(符号なし)
- VAR_WORD (18)
- 2バイト整数(符号なし)
- VAR_DWORD (19)
- 4バイト整数(符号なし)
- VAR_INT64 (20)
- 8バイト整数(符号付)
- VAR_ASTR (256)
- ANSI文字列
- VAR_USTR (258)
- UNICODE文字列
- VAR_ARRAY (8192[$2000])
- 配列
型変換
明示的な型変換
明示的にデータ型を変換することを明示的な型変換(explicit type conversion)と呼びます。
UWSCでは以下のようにVARTYPE関数を使うことで型を強制的に変換することができます。
浮動小数点型を整数型にする関数はCEIL関数(切り上げ)があります。
- 結果
暗黙の型変換
演算子などを使って異なるデータ型同士を扱う場合、一方のデータ型を他方のデータ型に自動的に変換することがあります。このような自動的なデータ型変換のことを、暗黙の型変換(implicit type conversion)と呼びます。
浮動数点型⇒整数型
浮動小数点型から整数型に変換するときは一般的に小数点以下が切り捨てられます。
例えば、STATUS関数の第一引数にはWindowを識別するID(整数型の値)を指定しますが、浮動小数点型の値を指定しても関数内部で自動的に整数に変換してから処理を行うためエラーにはなりません。
以下はIDに1.5を指定していますが小数点以下を切り捨て1として処理が行われます。このように関数の内部で行われる型変換を暗黙の型変換と言います。
以下はオフセットしたセルを選択するRange.Value プロパティです。Offsetの引数に1.5を指定しています。Offsetの引数型は整数なので暗黙の型変換が行われます。STATUS関数では切り捨て処理が行われ整数にしていましたが、Offfsetメソッドでは偶数丸めで整数型に変換されます。
このように同じ整数型に変換する処理でも関数やメソッドによって丸め方が異なります。意図しない結果を招くことがあるので、暗黙の型変換は注意が必要です。
以下のように引数に指定する前に型変換をすることで、意図しない結果を防ぐことができます。
使い方
2バイト整数(符号付)
Double型の数値をSmallInt型(範囲:-32,768~32,767)に変換します。32767はSmallInt型に変換できますが、32768はオーバーフローとなるためエラーが発生します。
4バイト整数(符号付)
Double型の数値をInteger型に変換します。数値に変化はありませんが、VARTYPE関数で型を調べると変更されていることがわかります。
5は倍精度浮動小数点値、3は4バイト整数(符号付)です。
- 結果
通貨型
小数第5位で四捨五入され、小数点以下は4桁となります。
- 結果
文字列を指定するとエラーになります。内容は「UnicodeString型からCurrency型への変換でエラーが発生しました。」という意味です。
- 結果
日付型
シリアル値を日付文字列に変換することができます。
- 結果
以下は日付型で指定できる形式です。
- 年/月/日
- 月/日
- 月/日/年
- 時:分:秒
- 時:分
- 年:yyyy、yy、y
- 月:mm、m
- 日:dd、d
yy=50〜99は1950〜1999年、y=0〜9は2000〜2009年、yy=00〜49は2000〜2049年、年は省略した場合は今年になります。
2021年に実行したときの結果。
- 結果
- 結果
日付文字列をシリアル値に変換します。
- 結果
ブール型
0はFalse、0以外はTrueになります。
- 結果
数値に変換できるものであれば、文字列でも大丈夫です。
- 結果
小数型⇒整数型
小数型から整数型に変換するときは、 偶数丸め によって丸められます。
- 結果
文字列
文字列を数値に変換するにはVARTYPE関数の第二引数にVAR_INTEGERを指定します。VAL関数と同じ結果を返します。
- 結果
プログラム実行例
変数のデータ型の値を文字で取得
VARTYPE関数で取得したデータ型の値を、連想配列で文字に変換します。
- 結果
型を取得
配列と格納されている値のデータ型を取得
配列のデータ型を取得します。
セーフ配列かどうか調べるには
VARTYPE関数の戻り値からセーフ配列の場合データ型を表す他の値との和で返されるので、戻り値が「8192」よりも大きい値になります。そのため戻り値が8192よりも大きければセーフ配列と判断することができます。
またはビット演算子のANDを使っても調べることができます。
\[8192 = 2^{13}\]
自作関数での型チェック
自作関数で引数の型をチェックするときに使います。
関連記事
- isString関数 (自作関数)
- 与えられた変数の型が文字列型か調べる。
- isObject関数 (自作関数)
- 与えられた変数の型がオブジェクト型か調べる。
- isEmpty関数 (自作関数)
- 与えられた変数の型がEmpty型か調べる。
- isFloat関数 (自作関数)
- 与えられた変数の型が小数型か調べる。
- isArray関数 (自作関数)
- 与えられた変数の型が配列型か調べる。
- isAssociative関数 (自作関数)
- 与えられた変数の型が連想配列型か調べる。
