VBScriptを使用して変数の型を取得するにはどうすればよいですか?
VarType 必要なものですか?
変数のサブタイプを示す値を返します。
+--------------+-------+---------------------------------------------+
| Constant | Value | Description |
+--------------+-------+---------------------------------------------+
| vbEmpty | 0 | Empty (uninitialized) |
| vbNull | 1 | Null (no valid data) |
| vbInteger | 2 | Integer |
| vbLong | 3 | Long integer |
| vbSingle | 4 | Single-precision floating-point number |
| vbDouble | 5 | Double-precision floating-point number |
| vbCurrency | 6 | Currency |
| vbDate | 7 | Date |
| vbString | 8 | String |
| vbObject | 9 | Automation object |
| vbError | 10 | Error |
| vbBoolean | 11 | Boolean |
| vbVariant | 12 | Variant (used only with arrays of Variants) |
| vbDataObject | 13 | A data-access object |
| vbDecimal | 14 | Decimal Value |
| vbByte | 17 | Byte |
| vbLongLong | 20 | LongLong integer (64 bit) |
| vbArray | 8192 | Array |
+--------------+-------+---------------------------------------------+
VarType関数は、それ自体で配列の値を返すことはありません。特定の型の配列を示すために、常に他の値に追加されます。 Variantの値は、VarType関数への引数が配列であることを示すためにArrayの値に追加された場合にのみ返されます。たとえば、整数の配列に対して返される値は、2 + 8192または8194として計算されます。オブジェクトにデフォルトプロパティがある場合、VarType(オブジェクト)はそのデフォルトプロパティの型を返します。
Set
を使用して変数に割り当てられたオブジェクトの型名を取得する場合は、代わりにTypeName
を使用できます。
Class SomeClass
'' empty class
End Class
Dim x
Set x = New SomeClass
WScript.Echo TypeName(x) '' displays "SomeClass"
Tmdean の回答は、(ほとんど)他のすべてのタイプの変数のタイプ名(整数ではない)を取得するためにも機能します( http://msdn.Microsoft.com/en- us/library/ie/y58s1cs6%28v = vs.84%29.aspx )
dim i,s,a
i = 1
s = "Hello world"
a = split("Hello World"," ")
WScript.Echo TypeName(i) 'Displays "Integer"
WScript.Echo TypeName(s) 'Displays "String"
WScript.Echo TypeName(a) 'Displays "Variant()"
Dim a, b, c, d, e, f
a = 10
b = "text"
c = Split("John Doe,Jane Smith,Dick Tracy", ",")
d = 1.2
e = Null
f = True
MsgBox "'a' is " & fVarType(a) & vbNewLine & _
"'b' is " & fVarType(b) & vbNewLine & _
"'c' is " & fVarType(c) & vbNewLine & _
"'d' is " & fVarType(d) & vbNewLine & _
"'e' is " & fVarType(e) & vbNewLine & _
"'f' is " & fVarType(f) & vbNewLine & _
"'g' is " & fVarType(c(0))
Function fVarType(x)
Const ArrayCode = 8192
Dim y
y = VarType(x)
If y < ArrayCode Then
fVarType = fGetType(VarType(x))
Else
fVarType = "vbArray with " & fGetType(VarType(x)- ArrayCode) & " elements"
End If
End Function
Function fGetType(vType)
Select Case vType
Case 0 fGetType = "vbEmpty"
Case 1 fGetType = "vbNull"
Case 2 fGetType = "vbInteger"
Case 3 fGetType = "vbLong"
Case 4 fGetType = "vbSingle"
Case 5 fGetType = "vbDouble"
Case 6 fGetType = "vbCurrency"
Case 7 fGetType = "vbDate"
Case 8 fGetType = "vbString"
Case 9 fGetType = "vbObject"
Case 10 fGetType = "vbError"
Case 11 fGetType = "vbBoolean"
Case 12 fGetType = "vbVariant"
Case 13 fGetType = "vbDataObject"
Case 14 fGetType = "vbDecimal"
Case 17 fGetType = "vbByte"
Case Else fGetType = "undetected"
End Select
End Function
vartypeは適切です...
Dim x
x=123
msgbox VarType(x)
Dim TypeDictionary
Set TypeDictionary = CreateObject("Scripting.Dictionary")
TypeDictionary.Add 0, "vbEmpty"
TypeDictionary.Add 1, "vbNull"
TypeDictionary.Add 2, "vbInteger"
TypeDictionary.Add 3, "vbLong"
TypeDictionary.Add 4, "vbSingle"
TypeDictionary.Add 5, "vbDouble"
TypeDictionary.Add 6, "vbCurrency"
TypeDictionary.Add 7, "vbDate"
TypeDictionary.Add 8, "vbString"
TypeDictionary.Add 9, "vbObject"
TypeDictionary.Add 10, "vbError"
TypeDictionary.Add 11, "vbBoolean"
TypeDictionary.Add 12, "vbVariant"
TypeDictionary.Add 13, "vbDataObject"
TypeDictionary.Add 17, "vbByte"
Public Function GetType(argument)
GetType = TypeDictionary.Item(VarType(argument))
End Function
このバージョンでは、ディクショナリの設定により多くの労力が費やされますが、すべてのタイプを毎回チェックするのではなく、1回のチェック(指が交差)ですべてのタイプを検索します。
同等のJScriptコード(JScriptにはtypeofがあり、多くのvbタイプがないため、仮想):
var TypeDictionary = {
0: 'vbEmpty',
1: 'vbNull',
2: 'vbInteger',
3: 'vbLong',
4: 'vbSingle',
5: 'vbDouble',
6: 'vbCurrency',
7: 'vbDate',
8: 'vbString',
9: 'vbObject',
10: 'vbError',
11: 'vbBoolean',
12: 'vbVariant',
13: 'vbDataObject',
17: 'vbByte'
};
var GetType = function() {
return TypeDictionary[arguments[0]];
};