条件分岐 : If 文
If 条件式1 Then
処理1
ElseIf 条件式2-1 And 条件式2-2 Then
処理2
ElseIf 条件式3-1 Or 条件式3-2 Then
処理3
Else
処理4
End If
IIF関数を使えば三項演算子のような処理もできる。
代入先変数 = IIf(条件式, True時の値, False時の値)
Dim a As Long
a = 100
'数値?
Debug.Print IIf(IsNumeric(a), "数値です", "数値ではありません")
実行結果数値です
条件分岐 : Select Case 文
Select Case 変数
Case 値1
処理1
Case 値2
処理2
Case Else
処理3
End Select
値の範囲指定や複数条件指定も可能。
Select Case temp
Case 1 To 3 '1~3
Debug.Print "1-3"
Case 4 To 6, Is >= 10 '4~6 または 10以上
Debug.Print "4-6, over 10"
Case Else 'その他
Debug.Print "others"
End Select
ループ : For - Next 文
Dim i As Long
For i = 1 To 10
Cells(i, 1) = i * 10
...
Next
カウンタ用変数 i の間隔を指定する場合は Step を使用する。
Dim i As Long
For i = 10 To 1 Step -1
Rows(i).Insert '行を挿入
...
Next
ループ : For Each - Next 文
配列を処理したいときによく使う。
Dim list As Variant, temp As Variant
temp = Array("aaa", "bbb", "ccc")
For Each list In temp
Debug.Print list
Next
Dim rng As Range
For Each rng In Range("A1:A5")
...
Next
ループ : Do - Loop 文
条件を満たす間ループする。While を Until にすると条件が偽の間ループとなるらしい。
Dim i As Long
'i >= 5 になったら抜ける
Do While i < 5
i = i + 1
Debug.Print i
Loop
必ず一度実行させたい場合は以下のように記述する。
Dim i As Long
'i >= 5 になったら抜ける(1回は必ず実行)
Do
i = i + 1
Debug.Print i
Loop While i > 5
ループ : 飛ばす/抜ける
次のループに飛ばす記述は無いらしい。(他言語の continue や next 相当)
GoTo ステートメントを使用してそれらしく動かすしかないと思う。(GoTo ステートメントは同じプロシージャ内へしかジャンプできない)
Dim i As Long
For i = 1 To 10
'i=5 の時は Continue まで飛ばす
If i = 5 Then
GoTo Continue
End If
Cells(i, 1) = i * 10
Debug.Print i
Continue:
Next
For - Next ループから抜ける場合は Exit For を使用。Do - Loop から抜ける場合は Exit Do を使う。下記の例では i = 5 を検出したら抜ける。
Dim i As Long
For i = 1 To 10
'i=5 の時はループから抜ける
If i = 5 Then
Exit For
End If
Next
おまけ
ループでよく使う最終行/最終列を取得する記述を以下にメモしておく。Dim columnEnd As Long '最終列
Dim rowEnd As Long '最終行
columnEnd = Cells(4, Columns.Count).End(xlToLeft).Column '4行目の最終列を取得
rowEnd = Cells(Rows.Count, 2).End(xlUp).Row 'B列目の最終行を取得
0 件のコメント:
コメントを投稿