VB備忘録
Visual Basic(VB, VBS, VBA)に関する備忘録です。
目次
VB Scriptのインストール方法
VBSの実行方法
VBの注意すべき仕様
- 変数の宣言
- 定数定義
- 演算子
- Ifステートメント
- Forステートメント
- Doステートメント
- Whileステートメント
- Withステートメント
- GoToステートメント
- Select Caseステートメント
- Setステートメント
- Subステートメント
- Functionステートメント
- Classステートメント
- VB Scriptの関数一覧
Windows10にはVBS(WSH)が最初からインストールされているので何もしなくても使用できます。
VBSの実行方法
①例えばfirst.vbsというファイルがc:\にあるときは、コマンドプロンプトより
c:\>cscript first.vbs c:\>wscript first.vbs
と入力すれば実行可能です。
cscriptとwscriptの違いは、バッチ処理的に実行する場合にはcscriptを、対話的に実行する場合にはwscriptを用います。
まぁ実際にやってみた方が良く分かるかと思います。
②エクスプローラーで.vbsファイルアイコンをダブルクリックする。
この場合にはwscriptで実行されます。
VBの注意すべき仕様
①ソースコードは大文字・小文字を区別しません。
②VBSでは行末にブランク+アンダーバー(" _")を付けることで1行のステートメントを複数行にわたって記述することができます。
VBでは自動的に強制削除されてしまうので使用できません(Visual Studio 2017のVBで確認)。
③ソースプログラムの先頭に「Option Explicit」というオプションを記述しておくと宣言されていない変数を使用することができなくなります。
つまらないバグを抑制するために必ず付けるようにしましょう。ちなみにVBでは「Option Explicit On」と記述して下さい。
1.変数の宣言
変数を宣言するには Dim を使います。
VBSでは型指定はできないので注意して下さい!
VBでの型宣言(VBS では型指定できないので As 以降が指定できません!!)
Dim x Dim i As Integer Dim j(2,3) As Integer※配列は0から使えるので、
Dim arr(3)
と宣言した場合には arr(0)~arr(3)までの4個使えます!
VBの型(しつこいですがVBSでは宣言時、型指定できません!)
ブール型 | Boolean | TrueまたはFalse |
バイト型 | Byte | 0~255までの整数 |
整数型 | Integer | -32,768~32,767の整数 |
長整数型 | Long | -2,147,483,648~2,147,483,647の整数 |
通貨型 | Currency | -922,337,203,685,477.5808 ~ 922,337,203,685,477.5807の固定小数点数 |
単精度浮動小数点数型 | Single | 負の値:約-3.4×10(38乗)~-1.4×10(-45乗)正の値:約1.4×10(-45乗)~1.8×10(38乗) |
倍精度浮動小数点数型 | Double | 負の値:約-1.8×10(308乗)~-4.0×10(-324乗)正の値:約4.9×10(-324乗)~1.8×10(308乗) |
日付型 | Date | 日付:西暦100年1月1日~西暦9999年12月31日時刻:0:00:00 ~ 23:59:59 |
文字列型 | String | 任意の長さの文字列 |
オブジェクト型 | Object | オブジェクト |
バリアント型 | Variant | すべてのデータ |
型変換(VBS関数リファレンスより)
VBSでは宣言時に型指定できませんが、内部では型が存在するので型変換が必要になることがあります!
CBool 関数 | ブール型 (Boolean) に変換する |
CByte 関数 | バイト型 (Byte) に変換する |
CCur 関数 | 通貨型 (Currency) に変換する |
CDate 関数 | 日付型 (Date) に変換する |
CDbl 関数 | 倍精度浮動小数点数型 (Double) に変換する |
CInt 関数 | 整数型 (Integer) に変換する |
CLng 関数 | 長整数型 (Long) に変換する |
CSng 関数 | 単精度浮動小数点型 (Single) に変換する |
CStr 関数 | 文字列型 (String) に変換する |
チェック関数(あまり使わないかも...)
IsArray 関数 | 変数が配列であるかどうかを調べる |
IsDate 関数 | 日付に変換できるかどうかを調べる |
IsEmpty 関数 | 変数が初期化されたかどうかを調べる |
IsNull 関数 | Null かどうかを調べる |
IsNumeric 関数 | 数値として評価できるかどうかを調べる |
IsObject 関数 | オブジェクトを参照しているかどうかを調べる |
TypeName 関数 | 変数のデータ型を表す文字列を調べる |
VarType 関数 | 変数のデータ型を表す数値を調べる |
2.定数定義
定数を定義するにはConstを用います。
Const DATA = 1 Const MSG = "Message"
3.演算子
+ | |
- | |
* | |
/ | |
Mod | 剰余(割り算した結果の余りを返す) |
^ | 指数演算 5 ^ 2 = 5の2乗 |
\ | 2つの数値の商を計算し、結果を整数で返します。 number1 \ number2 (number1,2は数式である) 除算を実行する前に、数式は内部処理形式がバイト型 (Byte)、整数型 (Integer)、または長整数型 (Long) の式に丸められます。 |
&(+) | 文字列に対して &(+) を使用すると文字列を連結します! |
= | |
<> | |
< | |
> | |
<= | |
>= | |
Is | オブジェクト比較 |
Not | (ブール型でないときはビット演算になる!) |
And | (ブール型でないときはビット演算になる!) |
Or | (ブール型でないときはビット演算になる!) |
Xor | (ブール型でないときはビット演算になる!) |
Eqv | 論理等価演算 |
Imp | 論理包含演算 |
4.Ifステートメント
(1)If ~ Then (2)If ~ Then Else End If (3)If ~ Then ElseIf ~ Then Else End If
5.Forステートメント
(1)For ~ Nextステートメント
For i = 0 To 5 (処理) If 条件 Then Exit For '条件によりForループを抜ける Next
Stepも使えます。
VBSでは使えませんが、Continue For文もあります。
(2)For Each ~ Nextステートメント
配列の要素の値を取得し、配列の要素すべてに対して処理が終了するまでループする!
Dim arr(3) Dim i arr(0) = 1 arr(1) = 3 arr(2) = 5 arr(3) = 10 For Each i In arr MsgBox(i) '要素の値を順番に表示 Next
6.Doステートメント
(1)無限ループ
Do if ~ Then Exit Do 'ループを抜ける Loop
VBSでは使えませんが、Continue Do文もあります。
(2)処理前に条件判定
Do (Until or While) 条件 'Untilは条件がFalseの間実行し、Whileは条件がtrueの間実行する 'ループを抜けるときは Exit Do を用いる! Loop
(3)処理後に条件判定(必ず1回は実行されます)
Do 'ループを抜けるときは Exit Do を用いる! Loop (Until or While) 条件 'Untilは条件がFalseの間実行し、Whileは条件がtrueの間実行する
7.Whileステートメント
ループ処理にはDoループよりもっと単純なWhileステートメントもあるそうな...
While <条件> ステートメント… Wend
Dim a a = 1 while a=1 str = InputBox("1以外で終了") a = CInt(str) Wend
8.Withステートメント
Withステートメント内では、指定したオブジェクト名を省略して記述することができます。
With オブジェクト名 (オブジェクト名)を省略して記述できる! End With
9.GoToステートメント
ジャンプ命令ですが、VBSにはGoTo命令はありません。
GoTo label01 MsgBox("このメッセージボックスは実行されません。") label01: MsgBox("ジャンプ先のメッセージボックスです。")
10.Select Caseステートメント
Caseの条件の書き方がいくつか種類があるのでサンプルプログラムをよく見てね!
Select Case 変数 Case 条件1 条件1が真(True)の場合に実行される処理 Case 条件2 条件2が真(True)の場合に実行される処理 ・・・ Case Else すべての条件式が偽(False)の場合に実行される処理 End Select
Dim a a = 10 Select Case a Case 0, 1 '条件はカンマで区切って複数指定可能です MsgBox("0 or 1") Case 2 MsgBox("2") Case 3, 4, 5 MsgBox("3, 4, 5") Case Else MsgBox("6以上") End Select
以下の2つのサンプルプログラムはVBSではエラーになり、実行できません。
Dim a a = 10 Select Case a Case 1 To 5 MsgBox("1~5") Case 6 To 10 MsgBox("6~10") Case 11 To 15 MsgBox("11~15") Case Else MsgBox("16以上") End Select
Dim a a = 10 Select Case a Case Is >= 15 MsgBox("15以上") Case Is >= 10 MsgBox("10~14。") Case Is >= 5 MsgBox("5~9") Case Else MsgBox("4以下") End Select
11.Setステートメント
オブジェクト変数にオブジェクトを代入するときはSetを使用しなければならない!
下記のサンプルプログラムはExcelのVBAのサンプルプログラムです。
Dim ws As Worksheet Set ws = Sheets("Sheet1") MsgBox(ws.Name) Set ws = Nothing 'オブジェクト破棄
Set ws = Sheets("Sheet1") は、変数wsにシート[Sheet1]を代入する命令です。
この変数wsの型は、宣言時に「As Worksheet」と指定されています。
オブジェクト変数は「As オブジェクト名」のように、オブジェクト名を使って型指定をします。
ワークシート(Worksheetオブジェクト)を格納する変数なら「As Worksheet」、
ブック(Workbookオブジェクト)を格納する変数なら「As Workbook」、
セル(Rangeオブジェクト)を格納する変数では「As Range」のように型指定をします。
また、すべてのタイプのオブジェクトを表す総称Objectを使って、
どんなオブジェクトでも格納できるオブジェクトの変数は「As Object」と指定します。
オブジェクト型で宣言したオブジェクト変数にオブジェクトを格納するときは、Setを使わなければなりません。
使い終わったオブジェクト変数にNothingを代入すると、オブジェクトを破棄できます。
12.Subステートメント
いわゆるサブルーチンです。
引数も指定可能です...が、VBSでは型指定が出来ないので変数名を並べて書くだけで良いようです。
Sub サブルーチン名() ... If 条件 Then Exit Sub 'サブルーチンから復帰 ... End Sub
重要:参照渡しと値渡し
プロシージャに引数を渡す場合、「参照渡し(call by reference)」と「値渡し(call by value)」という2つの方法があります。(参照渡しはポインタ渡しで、値渡しは普通の引数...C言語の場合の話)
VBScriptにおける引数は、デフォルトでは参照渡しであり変数の参照を引数として渡します。これはどういうことかというと、プロシージャ内で仮引数の値を変更した場合、実引数として渡した変数の値も変更されるということです。 値渡しにするには変数名の前に ByVal キーワードを付けます(下記参照)Sub Square(ByVal num) num = num * num MsgBox("2乗した値 : " & num) End Subちなみに参照渡しを明示的にするには ByRef キーワードを変数名の前に付けます!
13.Functionステートメント
いわゆる関数です。
以下はFunctionステートメントの例です。
戻り値は関数名に戻り値を代入すればOKです。
Exit Functionを実行すると終了できます。
Randomize MsgBox(GetRndAlpha()) Function GetRndAlpha() Dim alpha alpha = Int(26 * Rnd) + &H41 '&H41="A" + 0~25 GetRndAlpha = Chr( alpha ) '戻り値 End Function
14.Classステートメント
オブジェクトを定義します。
'オブジェクト定義 Class Foo Function foo1 MsgBox("foo1") End Function Function foo2 MsgBox("foo2") End Function End Class 'オブジェクト作成&呼び出し Set obj = New Foo With obj .foo1() .foo2() End With
オブジェクトを定義するために必要な Public, Private も使えます。
15.VB Scriptの関数一覧
(1)文字列処理関数
InputBox、MsgBox Left、Right、LTrim、RTrim、Trim、LCase、UCase、Mid、Replace、StrReverse、String、Space Len、InStr、InStrRev、StrComp Asc、Chr FormatCurrency、FormatDateTime、FormatNumber、FormatPercent
(2)数値演算関数
Sin、Cos、Tan、Atn、Sqr、Exp、Log Int、Fix、Sgn、Abs、Round Rnd, Randomize Hex、Oct
(3)日付処理関数
Now、Date、Time Year、Month、Day、Hour、Minute、Second、DatePart MonthName、Weekday、WeekdayName、DateAdd、DateDiff DateSerial、TimeSerial、DateValue、TimeValue、Timer
(4)データ型処理関数
TypeName、VarType IsArray IsDate、IsNumeric、IsObject、IsEmpty、IsNull CBool、CByte、CCur、CDate、CDbl、CInt、CLng、CSng、CStr
(5)配列処理関数
Array、Filter、Join、Split LBound、UBound
(6)そのほかの関数
CreateObject、GetObject、GetRef、LoadPicture、GetLocale、SetLocale ScriptEngine、ScriptEngineBuildVersion、ScriptEngineMajorVersion、ScriptEngineMinorVersion RGB、Eval