(for Internet Explorer)
← ▼ ▲
↑
IsDate
Function IsDate( Value as Date or string ) as boolean
Value に指定した値が、Date 型か、日付として有効な文字列かどうかを返します。
(Web)
← ▼ ▲
IsNumeric
Function IsNumeric( Value as integer or string ) as boolean
Value に指定した値が、整数型か、浮動小数型か、数字からなる文字列かどうかを返します。
サンプル
IsNumeric( 1 ) = True
IsNumeric( 1.2 ) = True
IsNumeric( "1" ) = True
IsNumeric( "1,000" ) = True
(Web)
関連
→ Eval
← ▼ ▲
型の変換
→ 数値と文字列
関連
Eval
CInt
Format 関数 (Web)
は、ありません。
FormatNumber
Hex
CLng
CSng
CDbl
CStr
FormatCurrency
FormatDateTime
FormatPercent
CByte
(Web)
← ▼ ▲
列挙型, Enum (VBScript)
VBScript には、列挙型がないので、下記のようにするとよいでしょう。
'-------------------------------------------------------------------------
' ### <<<< [SampleEnum] >>>>
'-------------------------------------------------------------------------
Class SampleEnumClass
Public Foo
Public Bar
Private Sub Class_Initialize()
Foo = 1
Bar = 2
End Sub
Public Function Str( EnumValue )
Select Case EnumValue
Case Foo : Str = "Foo"
Case Bar : Str = "Bar"
End Select
End Function
End Class
Dim SampleEnum : Set SampleEnum = new SampleEnumClass
使用するとき
型の定義
variable = SampleEnum.Foo
WScript.Echo SampleEnum.Str( variable )
Set ns = SampleEnum '// Copy name space
variable = ns.Foo
WScript.Echo ns.Str( variable )
SampleEnum 名前空間にある Foo というシンボル
← ▼ ▲
True, False (Boolean)
True
= -1 （全ビット１）
False
Not
全ビット反転
= 0
And
Or
全ビット論理積
全ビット論理和
引数に Boolean を指定すると、機能追加により引数が増えてしまうことが多いので、
Flags 型
を使うことをお勧めします。
ビットが１かどうか
ビットが０かどうか
Flags and 4
(Flags and 4)=0
not(Flags and 4) ではありません
← ▼ ▲
Dictionary クラス （ハッシュ、辞書型、Scripting.Dictionary）
Option Explicit
Class Book
Public Title ' メンバ変数
Public Price ' メンバ変数
End Class
main
Sub main
Dim book,dic,key,keys
Set book = New Book
book.Title = "Book Title"
book.Price = 400
Set dic = CreateObject( "Scripting.Dictionary" )
dic.Add "key1", book
MsgBox dic.Item("key1").Title
If dic.Exists("key1") Then MsgBox "!"
For Each key in dic.Keys '// or dic.Items
WScript.Echo key & " " & dic.Item(key).Price
Next
dic.Remove "key1"
dic.RemoveAll
End Sub
文字列（Key）から、数値やオブジェクトなど（Item）を高速に引き出します。
Scripting.Dictionary
Add
Item
Exists
Remove
RemoveAll
Dictionary
Keys
Key は重複できません。
Key は、文字列、または、整数値、または ""
(Web)
要素をデバッガでウォッチするときは、Keys, Items プロパティを参照します。
Items
Key
Key
：
Item
Item
：
Key
Item
Set dic = CreateObject( "Scripting.Dictionary" )
生成
サンプル
関連
→ Item デフォルト・プロパティ : 動的定義メンバー (vbsool)
Const c_NotCaseSensitive = 1
Set dic = CreateObject( "Scripting.Dictionary" )
dic.CompareMode = c_NotCaseSensitive
生成
Key の大文字小文字を区別しない
→ DictionaryClass (vbslib)
関連
→ DictionaryClass (vbslib)
→ Dict (vbslib)
← ▼ ▲
Add (Dictionary)
Sub Dictionary::Add( Key as string, Item as variant )
要素を追加します。
すでに Key がある時は、エラー 0x1C9 になります。
Dictionary::Item
すでに Key があるかどうかに関わらず設定するときは、
を使って
ください。
← ▼ ▲
Count (Dictionary)
Property Get Dictionary::Count() as integer
要素の数
← ▼ ▲
Keys (Dictionary)
Function Dictionary::Keys() as array of string
Dictionary の中にある要素のうち、キーを集めた配列を返す
Dictionary
Key Item
Key Item
Key Item
For Each key in dic.Keys
WScript.Echo key & " " & dic.Item(key)
Next
次のようにすれば、Key と Item の両方を参照できます。
← ▼ ▲
Items (Dictionary)
Function Dictionary::Items() as array of variant
Dictionary の中にある要素のうち、アイテムを集めたコレクションを返す
Dictionary
Key Item
Key Item
Key Item
← ▼ ▲
Item (Dictionary)
(Web)
Default Property Get Dictionary::Item( Key as string ) as variant
引数 key をキーとした item を返します。
dic.Item("key1") = 1
Set dic.Item("key2") = New Class
ただし、次のようにしても、item は変更できません
item = dic.Item("key1")
item = 1
item <> dic.Item("key1")
登録されていないときは、新規に登録します。
→ DicItem (vbslib)
返した item は参照返しなので、下記のように設定することができます。
dic("key1") = 1 '// dic.Item("key1") = 1
関連
Item はデフォルト・プロパティです。 .Item を省略できます。
登録したくないときは Exists で調べるか、
を使用してください。
DictionaryClass (vbslib)
キーが登録済みのときにエラーにするときは、
Dictionary::Add
を使ってください。
← ▼ ▲
Exists (Dictionary)
Function Dictionary::Exists( Key as string ) as boolean
(Web)
指定したキーに対応する要素が入っているかどうかを返します。
関連
→ DictionaryS_Class
キーが存在しないときに自動的にキーを追加しない辞書
← ▼ ▲
CompareMode (Dictionary)
(Web)
Property Dictionary::CompareMode as integer
キーの種類。 同じキーとして扱う条件。
0
バイナリ比較、大文字小文字を区別
1
文字列比較、大文字小文字を区別しない
他にもあります
Const NotCaseSensitive = 1
Dim dic : Set dic = CreateObject( "Scripting.Dictionary" )
dic.CompareMode = NotCaseSensitive
サンプル：
注意
すでにデータが入っているときは、エラーになります。
← ▼ ▲
Remove (Dictionary)
Sub Dictionary::Remove( Key as string )
登録されていないキーが指定されたら、エラーになります。
← ▼ ▲
RemoveAll (Dictionary)
Sub Dictionary::RemoveAll()
← ▼ ▲
正規表現 (VBScript.RegExp)
Set re = CreateObject( "VBScript.RegExp" )
re.Pattern = "^aaa.*bbb.c"
WScript.echo re.Test( "aaaxxxbbbyc" )
(Web)
→ 正規表現
-1
出力
(True)
RegExp::Test
関連
プロパティ
メソッド
string Pattern
正規表現、例：
Boolean IgnoreCase
大文字小文字の違いでもマッチするかどうか
デフォルト = False
"a.*z"
サンプル
RegExp::Execute
RegExp::Replace
Boolean Global
True = １行内で複数検索する、デフォルト = False
→ 実行例
正規表現にマッチする部分を、文字列から検索、または置換します。
複数行にまたがるパターンは指定できません。
検索します（マッチする部分がどこにあるか）
検索します（マッチする部分があるかどうか）
置換します
→ InStr
参考
→ InStrRev
→ Replace
→ grep (vbslib)
Regular Expression
Boolean MultiLine
行頭 "^"、行末 "$" が使えるようにします。
→ ToRegExpPattern (vbslib)
(Web)
→ new_RegExp (vbslib)
→ 正規表現による Visual Basic Scripting Edition (VBScript) の機能強化 (Web)
← ▼ ▲
実行例
テストされる
文字列
axbmacb
RegExp::
Pattern
RegExp::
Global
Match::
Value
a.b
True
axb, acb
axbmacb
x
False
x
[ 親: 正規表現 (VBScript.RegExp) ]
RegExp::
Test
True
True
axbmacb
a.b
False
入力データ
出力データ
axb
True
False
-
False
^x
axbmacb
→ MultiLine
aaa
bbb
a
b
-
True
a
b
aaa
ccc
a
b
-
-
False
-
a.*b
aaa
bbb
-
False
← ▼ ▲
Execute (RegExp)
Function RegExp::Execute( s as string ) as Matches
正規表現にマッチするかどうかテストし、マッチしたものを返します。
【引数】
s
テストされる文字列
返り値
マッチしたもの
【補足】
RegExp のプロパティ
に検索条件を設定してから呼び出してください。
[ 親: 正規表現 (VBScript.RegExp) ]
Set re = CreateObject( "VBScript.RegExp" )
re.Pattern = "a.b"
re.Global = True
Set matches = re.Execute( "raxbmacb" )
WScript.echo "Match count = " & matches.Count
For Each match In matches
WScript.echo "FirstIndex = " & match.FirstIndex & _
", Length = " & match.Length & ", Value = " & match.Value
Next
出力
Match count = 2
FirstIndex = 1, Length = 3, Value = axb
FirstIndex = 5, Length = 3, Value = acb
正規表現 = "a.b", テストされる文字列 = "raxbmacb", 複数検索する
→ Matches コレクション
(Web)
サンプル
RegExp::Global = False のときは、Matches::Count は 0 か 1 のどちらかになります。
参考
→ GetLineCount (vbslib)
FirstIndex は、0 = １文字目です。
← ▼ ▲
Match オブジェクト, Matches コレクション
(Web)
Match オブジェクトのプロパティ
Integer .FirstIndex
マッチした位置、最初=0、2バイト文字も 1 でカウント
Integer .Length
マッチした文字列の文字数、2バイト文字も 1 でカウント
String .Value
マッチした文字列
→ RegExp::Execute
サンプル
RegExp::Execute
でテストした結果です。
サンプル
Set re = CreateObject("VBScript.RegExp")
re.Pattern = "<DIV .*>"
re.Global = True
Set matches = re.Execute( text )
For Each match In matches
attr = sscanf( match.Value, "id=""%s""" )
text = Left( text, match.FirstIndex ) +_
"<DIV id="""+ attr +""" plus=""add"">" +_
Mid( text, match.FirstIndex + match.Length + 1 )
Next
match
任意の id属性（ワイルドカード）を持つ DIVタグに、plus 属性を加える
Matches オブジェクトのプロパティ
Match ( Index )
Integer .Count
マッチした数
Index + 1 番目のマッチした内容。 Index >= 0
(Web)
String .SubMatches(n)
( ) で区切られた Pattern のそれぞれのマッチした
文字列。 n>=0。 要素数は、.SubMatches.Count。
参考
→ Replace (RegExp)
TypeName は、"IMatch2" です。
← ▼ ▲
Test (RegExp)
Function RegExp::Test( s as string ) as Boolean
正規表現にマッチするかどうかテストし、1つでもマッチしたかどうかを返します。
【引数】
s
テストされる文字列
返り値
マッチした文字列があるかどうか
(Web)
Set re = CreateObject("VBScript.RegExp")
re.Pattern = "^aaa.*bbb.c"
WScript.echo re.Test("aaaxxxbbbyc")
-1
出力
(True)
RegExp のプロパティ
に検索条件を設定してから呼び出してください。
[ 親: 正規表現 (VBScript.RegExp) ]
（もし 0 なら False)
引数 s の一部にヒットしたときでも、True を返します。
Me.Pattern の先頭に "^"、末尾に "$" を付けると、引数 s の一部にヒットした
ときは、False を返します。
サンプル
← ▼ ▲
Replace (RegExp)
Function RegExp::Replace( s as string, to as string ) as string
(Web)
正規表現を使って、文字列の一部を置換します。
【引数】
s
to
入力文字列（置き換える前の文字列を含む文字列）
置き換えた後の文字列
返り値
[ 親: 正規表現 (VBScript.RegExp) ]
Set re = CreateObject( "VBScript.RegExp" )
re.Pattern = "a.b"
re.Global = True
WScript.echo re.Replace( "raxbmacb", "---" )
r---m---
出力
出力文字列（置き換えた後の文字列を含む文字列）
RegExp のプロパティ
に設定してから呼び
サンプル
サンプル
Set re = CreateObject( "VBScript.RegExp" )
re.Pattern = "%([0-9]+)"
WScript.echo re.Replace( "%123", "$1" )
re.Global = True
WScript.echo re.Replace( "%123 %456", "<$1>" )
出力
123
<123> <456>
注意： $1 は、他の正規表現
ライブラリで指定する ${1}
と同じ意味ですが、${1} と
指定できません。
→ 正規表現を使った置換
参考
→ 正規表現による Visual Basic Scripting Edition (VBScript) の機能強化 (Web)
→ Replace メソッド (Web)
置き換える前の文字列（検索条件）を
出してください。
← ▼ ▲
MultiLine (RegExp)
[ 親: 正規表現 (VBScript.RegExp) ]
Dim RegExp::MultiLine as boolean
Pattern に、行頭 "^"、行末 "$" が使えるようにします。
Set re = CreateObject("VBScript.RegExp")
re.Pattern = "A.*"+vbCR+"?"+vbLF+"^D"
re.MultiLine = True
Set matches = re.Execute( "ABC"+ vbCRLF +"DEF"+ vbCRLF )
echo "Match count = " & matches.Count
For Each match In matches
echo "FirstIndex = " & match.FirstIndex & _
", Length = " & match.Length & ", Value = " & match.Value
Next
サンプル
"ABC"+ vbCRLF +"DEF"+ vbCRLF に対して、"A.*"+vbCR+"?"+vbLF+"^D" がマッチするには、
MultiLine を True にする必要があります。 "^" がない "A.*"+vbCR+"?"+vbLF+"D" にマッチ
するには、MultiLine は False でも構いません。
改行文字は、任意の文字 "." や、行頭 "^" や、行末"$" にマッチしないので、 vbCR+"?"+vbLF
を指定する必要があります。 これは、MultiLine の値がどちらでも、違いはありません。
Match count = 1
FirstIndex = 0, Length = 6, Value = ABC
D
出力
← ▼ ▲
マッチしたパターンの種類を調べる
書きかけ
→ Replace (RegExp)
→ 参照記号 ${ } のエスケープ
${ } 変数 から ${ } 関数へ
${Func(ABC)}
← ▼ ▲
数値演算、論理演算、ビット演算
c = ( a mod b )
剰余。 あまり。 9 Mod 4 = 1, -9 Mod 4 = -1
&h1F
16進数の 1F （10進数の値は 31）
&h8000 〜 &hFFFF と、&h80000000 〜 &hFFFFFFFF は、マイナス
-32767〜+32767 は、Integer です。 -32768 は Long です。
Const Err_TestSkip = 2
定数。 参照する場所より上に記述する必要がある
Execute されるコードには再度記述が必要
→ クラスの定数
c = a and b
c = a or b
論理積
論理和、1 にするビット演算
c = a \ b
商（割った結果を整数にする）。 四捨五入あり
If は、0以外で真になります
c = Sqr( a )
平方根
→ VBScript の関数 (Web)
c = Int( a )
小数切捨て
c = Fix( a )
hex_str = Hex( 16 )
Hex
(Web)
CInt(1.9) = 2, Int(1.9) = 1, Fix(1.9) = 1
CInt(1.9) = -2, Int(-1.9) = -2, Fix(-1.9) = -1
c = a xor b
c = a and not b
排他的論理和
0 にするビット演算
キーワード：
ビットフィールド、ビット・フラグ
関連
参考
→ CInt
→ Eval
→ FormatNumber
→ Hex
→ 四捨五入、切り下げ、切り上げ
→ 16 進数値を長整数に変換する方法 (Web)
参考
CLng("&h8000")
16進数 &h8000 〜 &hFFFF の正の値を取得するとき。
… VBScript では下記 CLng
→ CInt2
関連
→ IsBitSet
\
→ Mod 演算子 (Web)
→ \演算子 (Web)
→ Modulo operation (Web)
引数は、文字列であること。 " " で囲まないと NG
c = a * n^2
c = a \ n^2
n ビット左シフト
n ビット右シフト。 \ は商（上記）。 四捨五入に注意。
←
↓