VBScript/Specification

VBScript 言語仕様 構文

2013-11-22

変数の暗黙的な宣言の禁止

基本的にDimが無くても変数を宣言することは可能で、スクリプト中に初めて登場した時点で変数が定義される(暗黙的な宣言)
Option Explicitをスクリプト中に記述することによって、以降の暗黙的な宣言を禁止し、Dimを用いた明示的な宣言を要求することができる

#sh(vb){{

' DimなどをつけなくてもOK
valSome1 = 1
valSome2 = 2

' 暗黙的な宣言を禁止する
Option Explicit
' 以降、変数使用前に明示的に宣言しないとエラーになる

Dim valSome3
valSome3 = 3 ' OK
valSome4 = 4 ' NG

}}

命令文

基本的に1行で命令を記述する

#sh(vb){{

Dim a
a = 1 + 3

}}

複数行にわたる場合はアンダースコアを行末に入れる

#sh(vb){{

Dim b
b = 0 _
+ 1 _
+ 2

}}

コメント文

シングルクォートから行末まではコメントとして扱われる
もしくはRemを使用しても可能(シングルクォートを使うほうが一般的)
なお、VBScriptでは複数行に渡ってコメントは記述できないため、各行シングルクォートを記述する必要がある

#sh(vb){{

'コメント
Dim a 'これもコメント

'複数行に渡る場合は
'各行に'を記述する必要が
'ある

Rem これもコメント

}}

Dim

変数の宣言に使用する
基本的にDimが無くても変数を宣言することは可能だが、"Option Explicit"が宣言されている場合にはDimが必須となる

#sh(vb){{

Option Explicit


Dim i
Dim message1, message2, message3

message1 = "Hello"

' Dimの文に値を定義することはできない
'Dim message4 = "Ni Hao"

}}

ReDim

動的配列の宣言に使用する

#sh(vb){{

Option Explicit


ReDim arr(10)
arr(3) = 3

' 再宣言すると中身は消える
ReDim arr(14)
arr(13) = 0

' Preserveをつけると再宣言したとき中身は保持される
ReDim Preserve arr(20)
WScript.Echo(arr(13))

}}

Const

定数の定義に使用する

#sh(vb){{

Const ZERO = 1

}}

Set

オブジェクトインスタンスの定義に使用する
また、インスタンスの破棄にも使用することがある

#sh(vb){{

Option Explicit

Dim objMyClass


' インスタンスの定義
Set objMyClass = New MyClass


' インスタンスの破棄
Set objMyClass = Nothing

}}

If/ElseIf/End If

#sh(vb){{

If condition1 Then
doUnderCondition1()
ElseIf condition2 Then
doUnderCondition2()
Else
doUnderOtherConditions()
End If

}}

Select/End Select

#sh(vb){{

Select Case condition
Case condition1
doUnderCondition1()
Case condition2
doUnderCondition2()
Default
doUnderOtherConditions()
End Select

}}

While/WEnd

#sh(vb){{

While condition
doUnderCondition()
WEnd

}}

Do/Loop

先判定型

#sh(vb){{

Do While condition
doUnderCondition()

If exitCondition Then
Exit Do
End If
Loop



Do Until condition
doUnderOtherConditions()

If exitCondition Then
Exit Do
End If
Loop

}}

後判定型

#sh(vb){{

Do
doAtFirstAndWhileUnderCondition(

If exitCondition Then
Exit Do
End If

Loop While condition



Do
doAtFirstAndUntilUnderCondition()

If exitCondition Then
Exit Do
End If

Loop Until condition

}}

For/Next

#sh(vb){{

For i = start to end
doUnderCondition()

If exitCondition Then
Exit For
End If
Next



For i = start to end Step step
doUnderCondition()

If exitCondition Then
Exit For
End If
Next



For Each val in collection
doAnythingToEachElement(val)

If exitCondition Then
Exit For
End If
Next

}}

Sub/End Sub

Subプロシージャを定義する
Subプロシージャは呼び出し元に結果を返さない場合に使用する

#sh(vb){{

Sub MyProcedure(arg1, arg2)
doAnything()
End Sub

}}

Function/End Function

Functionプロシージャを定義する
Functionプロシージャは呼び出し元に結果を返す場合に使用する
戻り値は「プロシージャ名=戻り値」で指定する

#sh(vb){{

Function MyProcedure(arg1, arg2)
doAnything()

Dim returnValue

MyProcedure = returnValue
End Function

}}

Call

プロシージャを呼び出す
SubおよびFunctionどちらでも構わないが、引数を明示的に取得する場合はCallをつけてはいけない

#sh(vb){{

' Subプロシージャ
Call MySubProcedure1()

' Functionプロシージャでも戻り値を無視する場合
Call MyFuncProcedure2(1, 2, 3)

' Fuctionプロシージャで戻り値を取得する場合はCallは書かない
' Callを書くと解析エラーになる
result = MyFunctionProcesure2(1, 2, 3)

}}

Class/End Class

クラスを定義する

#sh(vb){{

Class MyClass
Public publicValue
Private privateValue

Public PublicFunction()
doAnything()
PublicFunction = 0
End Function

Private PrivateFunction()
doAnything()
PrivateFunction = 0
End Function

Public Sub Class_Initialize()
publicValue = 0
privateValue = 0
End Sub

Pubic Sub Class_Terminate()
publicValue = 0
privateValue = 0
End Sub
End Class

}}

使い方

#sh(vb){{

Set myClass = New MyClass ' このときにClass_Initializeが呼ばれる

myClass.publicValue = 100

myClass.publicFunction()

Set myClass = Nothing ' このときにClass_Terminateが呼ばれる

}}

With/End With

ある同一のオブジェクトに対し複数の処理をする

#sh(vb){{

Set objA = new A

With objA
.Name = "name" ' objA.Name = "name" と同じ
.ID = 0 ' objA.ID = 0 と同じ
End With

}}

On Error Resume Next

エラーが発生したときの処理を定義する
エラーが発生した場合、発生した行の次の行から処理を続ける

#sh(vb){{

On Error Resume Next

Dim x, y, z
x = 1
y = 0
z = x / y ' エラー

doAnything()

' ...

}}

On Error Resume Next/On Error Goto 0

On Error Resume NextとOn Error Goto 0で囲うと、該当範囲でエラーが発生した場合にOn Error Resume Nextの次の行から処理をやり直す

#sh(vb){{

On Error Resume Next

Dim x, y, z
x = 1
y = InputBox("分母の数を入力")
z = 1 / y ' 入力によってはエラーが発生する

On Error Goto 0

}}

Errオブジェクト

エラーが発生した場合エラーオブジェクトがセットされる

#sh(vb){{

If Err Then
WScript.Echo("エラー " & Err.Number & " :" & Err.Description)
End If

}}

詳細はこちらを参照
http://www.atmarkit.co.jp/ait/articles/0702/15/news122_2.html


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-10-08 (土) 10:37:37