目次
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