VBA(VB6)のプログラミング言語特性
JavaエンジニアがVBAを始めるにあたって、覚えておきたい内容を書き連ねたいと思います。
ローカル変数の宣言はDimを使う
ローカル変数の宣言と初期化は別に行います。
Dim strVal as String strVal = "初期値"
動的配列の要素数を変更はReDimを使う
VBA の配列には「静的配列」と「動的配列」の2種類の配列が存在します。動的配列は要素数が決まっていない場合に使う配列です。
格納したデータを残したまま配列の要素数を変更する場合には、ReDim Preserve を指定します。
Dim A() As String ReDim A(2) A(0) = "山田" A(1) = "鈴木" A(2) = "佐藤" ReDim Preserve A(3) A(3) = "木村" MsgBox Join(A) 'Joinは配列を結合して文字列を返す関数です
変数の特殊な型:Variant
Variant 型は VB あるいは VBA 独自のどんな値でも入れることができる型です。また、変数の宣言時に型を指定しない場合、変数は自動的にVariant型になります。
Dim val 'Variant型として処理される val = 123; '数値も入る val = "文字列" '文字も入る val = Date '日付も入る
変数のスコープ(適用範囲)
ブロック単位のスコープがないことにご注意ください。
- Public:すべてのファイルから参照できます。
- Private:宣言したファイル内から参照できます。
- Dim:宣言した関数の中だけで参照できます。
If bol = True Then Dim strVal as String strVal = "メッセージ" End If Msgbox strVal '正常に「メッセージ」が表示される
行を途中で折り返す場合
VBAコードは1行ごとに命令文を記述して実行されます。 行の途中で改行したい場合は、「 _」半角スペース+アンダースコアで改行することができます。
If A(0) = 100 And _ A(1) = 100 And _ A(2) = 100 And _ A(3) = 100 And _ A(4) = 100 Then MsgBox "○" End If
SubとFunctionのちがい
Sub(メインプログラム)とFunction(プロシージャ:関数)のちがいは外部からの実行の有無と戻り値の有無です。
- Sub(メインプログラム)…外部からの実行→○、戻り値→×
- Function(プロシージャ:関数)…外部からの実行→×、戻り値→○
Function関数の戻り値の設定
Function関数の戻り値は、「関数名 = 戻り値」で設定します。
Function FuncSample() As String FuncSample = "Hello World!" '戻り値の設定 End Function
Exitでいろいろな処理から抜ける
途中で処理を終了するには、Exitステートメントを使います。
- Exit Sub:Sub関数を抜けます
- Exit Function:Function関数を抜けます
- Exit Do:Do文を抜けます
- Exit For:For文を抜けます
- Exit Property:プロパティを抜けるます
Dim i As Integer For i = 1 To 5 If i = 3 Then Exit For 'Forを抜ける End If Next
GoToで任意のラベルにジャンプする
GoToステートメントは指定したラベルまで処理をジャンプさせることができます。ラベルは同じプロシージャ内だけで、他のプロシージャへジャンプさせることはできません。
GoToステートメントを多用するとプログラムが分かりにくくなるので、なるべく使わないようにしましょう。
Sub ExecGoTo() MsgBox "メッセージ1" GoTo Label1 MsgBox "メッセージ2" '実行されない Label1: MsgBox "メッセージ3" End Sub
基本制御構文を覚えよう
条件分岐
' ' VBA ' If 条件式1 Then 処理1 ElseIf 条件式2 Then 処理2 Else 処理3 End If
// // Java // if (条件1) { 処理1; } else if (条件2) { 処理2; } else { 処理3; }
繰り返し
' ' VBA ' For 変数 = 初期値 To 到達値 処理 Next
' ' VBA ' Do While 条件式 処理 Loop
// // Java // for ( 変数 = 初期値; 条件式; 増分 ) { 処理; }
// // Java // while (条件式) { 処理; }
以上、VBA特有の構文を並べました。