よねさんのWordとExcelの小部屋 のHomeへ戻る

繰り返し処理(For〜Next,Do〜Loop):Excel VBA入門


スポンサードリンク


更新 2022/7/22

For〜Next For Each In〜Next Do〜Loop

繰り返し処理

For〜Next   topへ

  1. C1セルからC10セルまでにA1*B1の計算結果を入力する例。
    行番号が1から10と変化するようにします。
    Sub rei_1()
    Dim myCnt As Long
      For myCnt = 1 To 10
        Cells(myCnt, 3).Value = Cells(myCnt, 1).Value * Cells(myCnt, 2).Value
      Next myCnt
    End Sub

    実行結果
  2. 増減値に「2」を設定して1行おきに計算結果を入力する例。
    1行おきは Step 2 と指定します。
    Sub rei_1()
     Dim myCnt As Long
      For myCnt = 1 To 10 Step 2
        Cells(myCnt, 3).Value = Cells(myCnt, 1).Value * Cells(myCnt, 2).Value
      Next myCnt
    End Sub

    実行結果
  3. カウンタ(myCnt)が5になったら、途中でループを抜ける。
    ループの途中で、ある条件に達したらループから抜けたい場合は、Exit For で抜け出すことができます。
    Sub rei_1()
     Dim myCnt As Long
      For myCnt = 1 To 10
        If myCnt = 5 Then Exit For
          Cells(myCnt, 3).Value = Cells(myCnt, 1).Value * Cells(myCnt, 2).Value
      Next myCnt
    End Sub

    実行結果


    上の例では myCntが5になったら抜けるようにしていますが、For myCnt = 1 To 5 とすればよいので、例としては適切でなないですね・・。
    ということで、計算結果が150を超えたらループから抜けるように書き換えてみました。
    Sub rei_1kai()
     Dim myCnt As Long
      For myCnt = 1 To 10
       Cells(myCnt, 3).Value = Cells(myCnt, 1).Value * Cells(myCnt, 2).Value
       If Cells(myCnt, 3).Value > 150 Then Exit For
      Next myCnt
    End Sub
  4. 2重ループの例
    下図のような九九の表を作成してみます


    入力するセルはB2からになるので、ループの開始値「1」に1を加えて Cells(i + 1, j + 1) とすることで調整しています。
    Sub rei_kuku1()
      Dim i As Integer
      Dim j As Integer

      For i = 1 To 9 ’行番号を1〜9に変化させます
        For j = 1 To 9 ’列番号を1〜9に変化させます
          Cells(i + 1, j + 1).Value = i * j
        Next j
      Next i
    End Sub

    また、A1を基準にずらして入力すると考えれば、Offsetを利用して Range("A1").Offset(i, j).Value = i * j と書くこともできます。
    Sub rei_kuku1()
      Dim i As Integer
      Dim j As Integer

      For i = 1 To 9
        For j = 1 To 9
          Range("A1").Offset(i, j).Value = i * j
        Next j
      Next i
    End Sub

    下図のようになります。
  5. 2重ループの例2
    下図のような九九の表を作成してみます
    この例では1行目とA列の掛ける数値がランダムに入力されています。


    計算は1行目とA列の値ですので、基準となるA1セルからの位置関係で計算ができます。
    Range("A1").Offset(i, j).Value = Range("A1").Offset(i, 0).Value * Range("A1").Offset(0, j).Value としました。
    Sub rei_kuku1()
      Dim i As Integer
      Dim j As Integer

      For i = 1 To 9
        For j = 1 To 9
           Range("A1").Offset(i, j).Value = _
             Range("A1").Offset(i, 0).Value * Range("A1").Offset(0, j).Value
        Next j
      Next i
    End Sub

    下図のようになりました。

For Each In〜Next   topへ

Do〜Loop   topへ

  1. myCntが5以下の時は繰り返し実行する。
    Sub rei_1()
     Dim myCnt As Long
     myCnt = 1
      Do While myCnt <= 5
        Cells(myCnt, 3).Value = Cells(myCnt, 1).Value * Cells(myCnt, 2).Value
        myCnt = myCnt + 1
      Loop
    End Sub

    実行後に条件判断する時はLOOPの後ろにWhileを書きます
    この例では「myCnt < 6」となります。
    Sub rei_1()
     Dim myCnt As Long
     myCnt = 1
      Do
        Cells(myCnt, 3).Value = Cells(myCnt, 1).Value * Cells(myCnt, 2).Value
        myCnt = myCnt + 1
      Loop While myCnt < 6
    End Sub

    実行結果
  2. myCntが5を超えたら繰り返しを抜け出す。
    Sub rei_1()
     Dim myCnt As Long
     myCnt = 1
      Do Until myCnt > 5
        Cells(myCnt, 3).Value = Cells(myCnt, 1).Value * Cells(myCnt, 2).Value
        myCnt = myCnt + 1
      Loop
    End Sub

    実行結果
  3. IF文で抜け出す条件を書き込む(myCntが5を超えたら繰り返しを抜け出す)
    Sub rei_1()
     Dim myCnt As Long
     myCnt = 1
      Do
        Cells(myCnt, 3).Value = Cells(myCnt, 1).Value * Cells(myCnt, 2).Value
        myCnt = myCnt + 1
        If myCnt > 5 Then Exit Do
      Loop
    End Sub

    実行結果

スポンサードリンク



よねさんのWordとExcelの小部屋Excel(エクセル)講座の総目次Excel(エクセル) VBA入門:目次|繰り返し処理(For〜Next,Do〜Loop)

PageViewCounter
 Counter
 Since2006/2/27