目次
Excel VBA ベーシック出題範囲
- マクロの概念
- マクロ記録
- モジュールとプロシジャー
- VBAの構文
- 変数と定数
- セルの操作
- ステートメント
- 関数
- ブックとシート操作 マクロの実行
7-1)For…Nextステートメント
For…Nextステートメントは、特定の回数だけループを繰り返すために使用されます。
基本構文
For 変数 = 初期値 To 終了値 Step 増分 ‘処理 '(インデントする) Next 変数
- 変数 : 繰り返しの回数を数える為の変数(カウンタ変数)
- 初期値: 繰り返しの回数のスタートの値
- 終了値: カウンタ変数の最終地
- 増分 : 初期値から終了値までの増分
7-1-1)決まった回数の繰り返し
順次処理の場合
データを別のセルにコピーする時、順次処理だと同じ様な文を記述しなかればなりません。

For…Nextステートメントの理解(1)
For文を使うと似たような処理の繰り返しを記述することができます。

For文を使ったプログラム
Dim i As Long 'forの回数をカウント
Dim r As Long '行数をカウント
'行の開始位置
r = 10
'8回繰り返す
For i = 1 To 8
'r 行のE列をH列に入れる
Cells(r, "J") = Cells(r, "F")
'次の行を見る
r = r + 1
' For 文に戻る
Next i

For…Nextステートメントの理解(2)
Next r で、For 文が呼び出されるたびに、r の値が、10 から 17 まで 1 増えて行きます。 この r で行数を示す事で、行を指定できます。

Dim r As Long '行数をカウント
'行の位置 10~17 まで回繰り返す
For r = 10 To 17
'r 行のE列をH列に入れる
Cells(r, "L") = Cells(r, "F")
' For 文に戻る
Next r
7-1-2)データの件数が分らない時
列の最後の行をEndメソッドで調べて、Rowプロパティで行数を求めます

Dim r As Long '行数をカウント
'Row の最終行を調べる
lastRow = Range("F10").End(xlDown).row
'行の位置 10~LastRow まで回繰り返す
For r = 10 To lastRow
'r 行のE列をH列に入れる
Cells(r, "H") = Cells(r, "F")
' For 文に戻る
Next r
7-1-3)複数のFor…Nextを使用する
複数の行を移す時は、Fo文を列挙する事も出来ます。

Dim r As Long '行数をカウント
'Row の最終行を調べる
lastRow = Range("F10").End(xlDown).row
'E列をH列に移す
For r = 10 To lastRow
Cells(r, "H") = Cells(r, "E")
Next r
'F列をI列に移す
For r = 10 To lastRow
Cells(r, "I") = Cells(r, "F")
Next r
複数の行を移す時は、Fo文を入れ子にる事も出来ます。

Dim row, col As Long '行数をカウント
'Row の最終行を調べる
lastRow = Range("F10").End(xlDown).row
'行を順に進める
For row = 10 To lastRow
'列を順に進める
For col = 5 To 6
' 5列目を8列目、6列目を9列目に移す
Cells(row, col + 3) = Cells(row, col)
Next col
Next row
7-1-4)二つの票を結合する
入れ子(ネスト)とIF文で、二つの表を合成します。

Dim row1, row2 As Long '行数をカウント
Dim lastRow1 As Long '行数をカウント
Dim lastRow2 As Long '行数をカウント
'元の表の最終行を調べる
lastRow1 = Range("C10").End(xlDown).row
'検索先の表の最終行を調べる
lastRow2 = Range("H10").End(xlDown).row
'元の表の行を順に進める
For row1 = 10 To lastRow1
'検索先の行を順に探す
For row2 = 10 To lastRow2
If Cells(row1, "C") = Cells(row2, "H") Then
Cells(row1, "E") = Cells(row2, "I")
Exit For 'For ループを抜ける
End If
Next row2
Next row1