繰り返し処理でよく使われるのが、For 〜 Next文です。
ある回数、繰り返して実行させる、とても便利なステートメントです。
このステートメントの特性を知っておくと、マクロを組む上でとても重宝します。
下のプロシージャは、5行5列の範囲から、ある数値がどこにあるのか探すものです。
例では、4という数字が、5行目の3列目にあると示しています。
では、ここにない数値を探させたら、どうなるのでしょうか?
Sub test() Dim R As Integer '行 Dim C As Integer '列 Dim n As Integer '番号 n = 4 For R = 1 To 5 For C = 1 To 5 If Cells(R, C) = n Then Exit For ←@ Next C If Cells(R, C) = n Then Exit For ←A Next R MsgBox "番号=" & n & " 行=" & R & " 列=" & C ←B End Sub |
@ セルの値がnと同じだったら、For文(変数Cの)を抜け出ます。 A セルの値がnと同じだったら、For文(変数Rの)を抜け出ます。 B ここで、それぞれの変数の内容を表示させます。 この表にない数値を探させたら・・・、 例えば、n=30 として、実行させると、Rは6を、Cも6を返します。 つまり、For文では、最後まで処理したとき、変数はゴールとして設定した値の 次の値になって終わるということです。 これを利用すると、次のようなことができます。 |
Sub test() Dim R As Integer '行 Dim C As Integer '列 Dim n As Integer '番号 n = 30 For R = 1 To 5 For C = 1 To 5 If Cells(R, C) = n Then Exit For Next C If Cells(R, C) = n Then Exit For Next R If R = 6 Then ←C MsgBox "指定した番号(" & n & ")は、ありませんでした。" Else ←D MsgBox "番号=" & n & " 行=" & R & " 列=" & C End If End Sub |
C Rの値が6のときは、数字が見つからなかったということなので、 「見つからなかった」というメッセージを表示します。 D 反対に、それ以外の数字の時は、行や列の位置を表示します。 |
これは、例えば、R=1 to 0 のような設定をした場合です。
結論から言えば、何も実行せずに終わります。
そうすると、あり得ない値を渡したときには、処理を飛ばしてくれることがわかります。
Sub test() Dim R As Integer Dim n As Integer For R = 1 To 0 n = n + 1 Next R MsgBox "R=" & R & " n=" & n End Sub |
返されたRの値は1で、内容のnはまったく実行されていません。 |
これは、例えば、R=1 to 10 Step 4 などの設定をした場合です。
結論から言うと、Rは1、5、9のとき実行し(3回)、13になったとき処理を飛ばします。
Sub test() Dim R As Integer Dim n As Integer For R = 1 To 10 Step 4 n = n + 1 Next R MsgBox "R=" & R & " n=" & n End Sub |
足し算は、3回行われています。 |