(for Internet Explorer)
Function  FormatNumber( Number as integer [, Decimal as integer, bZero as integer,
                        bMinus as integer, bKeta as integer ] ) as string
数値を、書式で整列した文字列に変換します。
【引数】
Number
Decimal
変換前の数値
小数の桁数。 四捨五入されます。 省略時 = 2
返り値
数値を、書式で整列した文字列
bZero
整数部が 0 のとき 0 を付けるか。 True=0.1、False=.1、省略時= OS設定(True)
'// デフォルト
FormatNumber( 1 ) = "1.00"

'// 小数点の桁数
FormatNumber( 1, 0 ) = "1"
FormatNumber( 1, 1 ) = "1.0"
FormatNumber( 1, 2 ) = "1.00"
FormatNumber( 1.5, 0 ) = "2"

'// 整数部が 0 のとき
FormatNumber( 0.5, 1, True )  = "0.5"
FormatNumber( 0.5, 1, False ) = ".5"

'// マイナスのとき
FormatNumber( -0.5, 1,, True )  = "(0.5)"
FormatNumber( -0.5, 1,, False ) = "-0.5"

'// 桁を区切るコンマ
FormatNumber( 12345, 0,,, True )  = "12,345"
FormatNumber( 12345, 0,,, False ) = "12345"
サンプル:
bMinus
負の数のとき - 記号ではなく ( ) で囲むかどうか。 省略時=OS設定(False)
bKeta
3桁ごとにコンマで区切るかどうか。 省略時=OS設定(False)
数値の先頭に 0 をつけるときは、下記のようにします。
Right( "00" & 27, 3 ) = "027"
3桁のときは、0 を2つ並べます
サンプル:
FormatNumber( 12345.6, 2,,, False ) = "12345.60"
小数2桁、コンマ区切りなし
関連
キーワード:
Function  Hex( Num as integer ) as string
数値から、16進数の文字列に変換します。
サンプル:
Hex( 16 ) = "10"
CLng( "&h" & "10" ) = 16
関連
16進数の文字列から、数値に戻すには、
CLng( "&h" & Mid( "0x10", 3 ) )
32ビット整数 (C言語の int32_t) の値は、&h...& と記述します。
 &h8000  = -32768  '// (Long型 = C言語の int16_t 型の値から型変換したもの)
 &h8000& =  32768  '// (Long型 = C言語の int32_t 型の値)
&h10000  =  65536  '// (Long型 = C言語の int32_t 型の値)
Right( "000"+ Hex( 15 ), 4 ) = "000F"
サンプル:
4桁の 16進数にする
CLng( Replace( "0x10", "0x", "&h" ) )
Function InStr( [start_i,] s, key [,mode] ) as integer
(p211)
start_i
開始位置(1〜)、省略すると 1
s
検索対象の文字列
key
検索キーワード
返り値
見つかった位置(1〜)、 見つからなかった = 0
取得した返り値 i を Left( s, i ) とすると、見つかった文字まで含みます。
取得した返り値 i を Mid( s, i ) とすると、見つかった文字から含みます。
start_i を指定しても、返り値は s の先頭からの位置です。
【引数】
文字列 s の中を検索して、文字列 key のある位置を返します。
A B C D E F
1 2 3 4 5 6
InStr
Left(s,3) = "ABC"
Mid(s,3) = "CDEF"
参考
s が Null のときは、Null を返します。
大文字小文字を区別しないときは、s と key を LCase 関数で変換してください。
サンプル
Assert  InStr( "abcde", "cd" ) = 3
Assert  InStr( 1, "abcde", "CD", 1 ) = 3
補足
大文字小文字を区別しない
mode
大文字小文字を 0=区別する、1=区別しない
詳細な検索条件や見つかった数など
Function InStrRev( s, key [,start][,mode] ) as integer
start_i
開始位置(1〜)、省略すると -1=末尾
s
検索対象の文字列
key
検索キーワード
返り値
見つかった位置(1〜)、 見つからなかった = 0
【引数】
文字列 s の中を末尾から検索して、文字列 key のある位置を返します。
mode
関連
大文字小文字を 0=区別する、1=区別しない
start_i 引数は、次にマッチする可能性があるキーワードの末尾の位置を指定してください。
Assert  InStrRev( "abcbc", "bc", 5 ) = 4
Assert  InStrRev( "abcbc", "bc", 4 ) = 2
Assert  InStrRev( "abcbc", "bc", 3 ) = 2
Assert  InStrRev( "abcbc", "bc", 2 ) = 0
InStrRev( "abcbc", "bc", 0 )  '// Error
サンプル
Function  Replace( str as string, from as string, to as string
                   [, start[, count[, compare]]] )
str
置き換えられる文字列を含む文字列
from
置き換える前の文字列
to
置き換えた後の文字列
返り値
置き換えた後の文字列を含む文字列
【引数】
文字列の一部を置き換えます。
str に from と一致する文字列が複数あったら、すべて置き換えます。
例:
Replace( "abcd abcd", "abc", "x" ) = "xd xd"
関連
関連
Replace( "abcd ABCD", "abc", "x",1,-1,1 ) = "xd xD"
例:
Function  Join( Array as array of variant [,Delimiter as string] ) as string
配列の要素を列挙した文字列を返します。
【引数】
Array
Delimiter
列挙する配列
要素の間に入れる文字列、省略時=" "(空白)
返り値
配列の要素を列挙した文字列
関連
英文字を小文字にします。
Function  LCase( s as string ) as string
Function  Asc( Text as string ) as integer
文字列の先頭の文字を、Shift-JIS コードの数値で返します。(Asc)
VBScript のテキストは Unicode ですが、Asc の返り値は Unicode ではありません。
AscW の返り値は Unicode です。
サンプル
Assert  Asc( "あ" ) = &h82A0
82 が Shift-JIS の第1バイト
&h82A0 はマイナスの値です。
Function  AscW( Text as string ) as integer
Assert  AscW( "あ" ) = &h3042
3042 は、Unicode
関連
文字列の中のすべての文字コード(を表示)
Function  Left( s as string, i as integer ) as string
文字列の左から数文字だけ返します。
s
i
返り値
"abc"
2
"ab"
"abc"
9
"abc"
0
""
"abc"
エラー 5
-1
"abc"
"あaいbうc"
4
"あaいb"
""
1
""
Function  Mid( s as string, i as integer [, n as integer ] ) as string
文字列の i 文字目から n 文字分だけ返します。
s
i
返り値
"abc"
2
"b"
""
4
"abc"
0
"abc"
エラー 5
"あaいbうc"
3
"いb"
n
1
(省略)
"bc"
2
"abc"
2
"bc"
3
"abc"
1
2
1
0
""
1
"abc"
1
-1
"abc"
エラー 5
1
9
""
"abc"
Function  StrComp( String1 as string, String2 as string [, Option as integer ] )
  as integer
文字列を比較します。
Option に指定できる値
vbBinaryCompare (=0)
vbTextCompare (=1)
大文字小文字は区別しない
大文字小文字は区別する。(デフォルト)
サンプル: 下記の条件式は、すべて真です
If StrComp( "a", "b" ) < 0 Then ...
If StrComp( "a1", "a2" ) < 0 Then ...
If StrComp( "A", "a" ) < 0 Then ...
If StrComp( "-", " " ) < 0 Then ...  '// ハイフンは空白より小さい
If StrComp( "A", "a", 1 ) = 0 Then ...
Select 文で、大文字小文字を区別しないときは、次のように UCase を使います。
  Select Case  UCase( str )
    Case  "ABC" :  op = ABC
    Case  "DEF" :  op = DEF
    Case Else :    op = Empty
  End Select
返り値は、String1 = String2 なら、0 です。
0 と比較する演算子は、String1 と String2 を比較する演算子と同じになります。(下記サンプル)
Function  UCase( s as string ) as string
英文字を大文字にします。
Class Book
  Public  m_Title   '// メンバ変数
  Private m__Price  '// メンバ変数

  Private Sub  Class_Initialize()  '// コンストラクタ
  End Sub

  Public Sub  Echo()  '// メンバ関数
    WScript.Echo  Title & " - " & Price
  End Sub
End Class

main

Sub main()
  Dim  a_book
  Set  a_book = new Book : ErrCheck
 
  a_book.Title = "VBS本"
  a_book.Echo

  a_book = Empty  '// 明示的な廃棄
End Sub
Class
Public Sub
new
.
End Class
配列のメンバ変数もできます。
ただし、Redim は、メンバ関数の中でしかできません。
Public  XArr()
Redim Preserve  XArr(-1)
コンストラクタで初期化
構造体配列の初期化子に相当するものはありませんが、
Me
メンバ関数の中で使える、自分のオブジェクト(this ポインタ)
TypeName( obj )
クラス名を文字列で返す
クラスを関数の引数に渡すことはできません。 オブジェクトは渡せます。
If a Is b Then
同じオブジェクトかどうかを判定します。
Class Book
  Private Sub  Class_Initialize()
  End Sub

  Private Sub  Class_Terminate()
  End Sub
 
  Public Property Get  Title()
    Title = ""
  End Property

  Public Property Let  Title( value )                     
  End Property

  Public Property Set  AnObj( obj )
  End Property

  Public Property Get  Title( index )                               
    Title = ""
  End Property
End Class
Class_Terminate
  Set ObjA.AnObj = ObjB   ' Property Set AnObj が呼ばれる
プロパティにオブジェクトを設定するときは、次のように記述し、Property Set が呼ばれます。
  Public Property Let  XXXX( x ) : XXXX = x : End Property
  Public Property Get  XXXX() : XXXX = m_XXXX : End Property
  Public Property Set  XXXX( x ) : Set XXXX = x : End Property
  Public Property Get  XXXX() : If IsObject(m_XXXX) Then Set XXXX = m_XXXX : _
                                  Else XXXX = m_XXXX : End If : End Property
' コンストラクタ
' プロパティ(Read)
' プロパティ(Write)
' プロパティ(Set)
' 添え字付き Read プロパティ
すれば使えます。
をサポート
関連
参考
委譲するとき
  Public Property Let  XXXX( x ) : m_Partner.XXXX = x : End Property
  Public Property Get  XXXX : XXXX = m_Partner.XXXX : End Property
  Public Property Set  XXXX( x ) : Set m_Partner.XXXX = x : End Property
  Public Property Get  XXXX : Set XXXX = m_Partner.XXXX : End Property
  Public Sub  XXXX( a ) : m_Partner.XXXX  a : End Sub
  Public Function  XXXX( a ) : XXXX = m_Partner.XXXX( a ) : End Function
→ オブジェクトの属性の反映 (C言語)
Class_Terminate (デストラクタ) メソッドは、どの変数からもオブジェクトが参照されなく
なったとき(参照カウントが0になったとき)に呼び出されます。 このとき、オブジェクトは
削除されたと見なされます。
WScript.Quit が呼ばれたとき、ローカル変数に Set されたオブジェクトの
Class_Terminate は、呼ばれません。 実行時エラーになったときは呼び出されます。
グローバル変数のオブジェクトの Class_Terminate なら、WScript.Quit が呼ばれた
ときでも、呼ばれます。
VBScript は、例外処理構文が使えないため、Finally ブロックを記述できません。
On Error Resume Next は、サブ・プロシージャのエラーをキャッチできますが、
Finally ブロックにジャンプする機能がありません。
Finally ブロックに似た記述をする
Class_Terminate で、エラーが発生する可能性のある処理は行わないでください。
参考
参考
通常、Class_Terminate が呼ばれたら、オブジェクトは削除されたことになりますが、
厳密には、オブジェクトはメモリ上に存在し、オブジェクトを参照することはできます。
これは同時に複数のオブジェクトが削除されたときに、それぞれの Class_Terminate
が呼ばれるのですが、すでに Class_Terminate が呼ばれたオブジェクトを、別の
Class_Terminate から参照することができるところから分かります。
オブジェクト
変数 A
変数 B
Set A = new ClassA  '// ClassA のオブジェクトを生成
Set B = A
A = Empty
変数 B
オブジェクト
B = Empty  '// Class_Terminate が呼ばれる
上記は、変数に Empty を代入することで、オブジェクトを参照しなくなっていますが、
Empty 以外の値や、別のオブジェクトを参照するようになっても参照しなくなります。
関数の中のローカル変数であれば、関数から返っても参照しなくなります。
関連
相互参照しているオブジェクトは、参照されなくなってもプログラム終了時まで
残り続けます。
Option Explicit

Class  ClassA
  Public  Name
  Public  Ref
  Public  Del
  Private Sub  Class_Terminate()
    If not IsEmpty( Del ) Then _
      WScript.Echo  Name + "::Class_Terminate .Del = Empty" : Del = Empty
    WScript.Echo  Name + "::Class_Terminate"
  End Sub
End Class


'// グローバルでは、生成した順番で Class_Terminate が呼ばれます。
Dim  g
Dim  a : Set a = new ClassA : a.Name = "a"
Dim  b : Set b = new ClassA : b.Name = "b"

If 0 Then  Set  a.Ref = b
If 0 Then  Set  b.Ref = a
  '// グローバルのオブジェクトに参照関係があっても、
  '// Class_Terminate が呼び出される順序に影響しません。


main

Sub  main()
  '// ローカルでは、生成した順番と逆に Class_Terminate が呼ばれます。
  Dim  c : Set c = new ClassA : c.Name = "c"
  Dim  d : Set d = new ClassA : d.Name = "d"
  Dim  e : Set e = new ClassA : e.Name = "e"

  If 0 Then  Set c.Ref = d  '// c, d の順で呼ばれるようになります
  If 0 Then  Set a.Ref = e  '// a, e の順で呼ばれるようになります

  Set  g = new ClassA : g.Name = "g"  '// b の後で呼ばれます

  Set  a.Del = new ClassA : a.Del.Name = "a.Del"  '// 後で呼ばれます
  Set  e.Del = new ClassA : e.Del.Name = "e.Del"  '// 即時呼ばれます

  If 0 Then
    WScript.Quit  4  '// c,d,e の Class_Terminate は呼ばれません。
                     '// ただし、a.Ref = e を実行したら e の
                     '// Class_Terminate は、a の後に呼ばれます。
  Else
    unknown_symbol_error
  End If
End Sub

 
グローバルの変数に格納したオブジェクトは、格納した順番で Class_Terminate が呼ばれます。
ローカルの変数に格納したオブジェクトは、格納した順番と逆に Class_Terminate が呼ばれます。
A から B を参照している(A のプロパティで B を参照している)場合、A、B の順に
Class_Terminate が呼ばれます。 ただし、グローバルのオブジェクト同士に参照関係があっても
無くても、呼び出される順番は変わりません。
検証コード
Class_Terminate の中で、オブジェクトの参照カウントをゼロにした場合も、参照関係と同様に、
ローカルでは即時呼ばれますが、グローバルでは後で呼ばれます。
デバッガで Class_Terminate の中でブレークしたときに、コールスタックを見ると、削除される
ローカルオブジェクトが所属する関数ではなく、その関数を呼び出している関数から、
Class_Terminate が呼ばれるように見えます。
関連
Case1
Case2
WScript.echo  "End of Main"
WScript.echo  "もし、ここ以降でデストラクターが動くときは、"+_
    "プログラム終了時にすべてのオブジェクトを削除する"+_
    "ことによるデストラクター呼び出しです。"

Sub  Case1()
    WScript.echo  "Case1:"
    Set a_object = new A_Class
    Set b_object = new B_Class
    Set a_object.Reference = b_object
End Sub

Sub  Case2()
    WScript.echo  "Case2:"
    Set a_object = new A_Class
    Set b_object = new B_Class
    Set a_object.Reference = b_object
    Set b_object.Reference = a_object
End Sub


Class  A_Class
    Public  Reference

    Private Sub  Class_Terminate()
        WScript.echo  "A_Class::Class_Terminate"
    End Sub
End Class

Class  B_Class
    Public  Reference

    Private Sub  Class_Terminate()
        WScript.echo  "B_Class::Class_Terminate"
    End Sub
End Class
検証コード
相互参照していると、関数内のローカル・オブジェクト同士であっても、Class_Terminate は
呼ばれません。 プログラム終了時に呼ばれます。
Case1:
Case1: A_Class::Class_Terminate
Case1: B_Class::Class_Terminate
Case2:
End of Main
もし、ここ以降でデストラクターが動くときは、プログラム終了時にすべての
オブジェクトを削除することによるデストラクター呼び出しです。
Case2: A_Class::Class_Terminate
Case2: B_Class::Class_Terminate
表示例:
参考
→ ガーベージコレクション (GC)
A
B
A, B とも、被参照(矢印の先)の数が2つずつ
を使うと、関数から返るときに Class_Terminate が呼ばれ
のキーや配列番号で参照することで、Class_Terminate が呼ばれなくなる状況を回避
することができます。
辞書のキーや配列番号
B
A
オブジェクトの Set
るようにできます。