繰り返し文


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

繰り返し

 

For~Next   topへ

  • 繰り返す回数が決まっている場合、指定回数ステートメントを実行します。
    1. C1からC10までにA1*B1の計算結果を入力する。
      • Sub rei1()
        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
      • 実行結果
        vba05_01.gif
    2. 増減値に「2」を設定して1行置きに計算結果を入力する
      • Sub rei1()
         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
      • 実行結果
        vba05_02.gif
    3. カウンタ(myCnt)が5になったら、途中でループを抜ける。
      • Sub rei1()
         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
      • 実行結果
        vba05_03.gif
    4. 2重ループの例
      • 下図のような九九の表を作成してみます
        vba05_05.gif
      • 入力するセルはB2からになるので、ループの開始値「1」に1を加えて Cells(i + 1, j + 1) とすることで調整しています。
        Sub rei_kuku1()
          Dim i As Integer
          Dim j As Integer

          For i = 1 To 9
            For j = 1 To 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
      • 下図のようになります。
        vba05_06.gif
    5. 2重ループの例2
      • 下図のような九九の表を作成してみます
        この例では1行目とA列の掛ける数値がランダムに入力されています。
        vba05_07.gif
      • 計算は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
      • 下図のようになりました。
        vba05_08.gif

For Each In~Next   topへ

  • オブジェクトを繰り返し処理します。
    1. セル範囲を繰り返し処理します。
      セル範囲(C1:C10)に(2つ左列のセルの値)*(1つ左列のセルの値)を入力します。
      • Sub rei1()
         Dim myRng As Range
         Dim c As Range
         Set myRng = Range("C1:C10")
          For Each c In myRng
            c.Value = c.Offset(0, -2).Value * c.Offset(0, -1).Value
          Next c
        End Sub
      • 実行結果
        vba05_01.gif

Do~Loop   topへ

  • ループ条件を満たしている間は繰り返す。Do While
    ループ条件が満たされるまで繰り返す。Do Until
  • 抜け出す条件が適当でない時、無限ループに入り終了できなくなります。
    • [Esc]キーを押すと、コードの実行が中断できます。
      タイミングが悪く中断できない時は[Esc]キーを押し続けます。
      • [CTRL]+[Break(Pause)](DOS-V機)または[CTRL]+[STOP](NECの98シリーズ)でも中断できます。
    1. myCntが5以下の時は繰り返し実行する。
      • Sub rei1()
         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 rei1()
           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
      • 実行結果
        vba05_04.gif
    2. myCntが5を超えたら繰り返しを抜け出す。
      • Sub rei1()
         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
      • 実行結果
        vba05_04.gif
    3. IF文で抜け出す条件を書き込む(myCntが5を超えたら繰り返しを抜け出す)
      • Sub rei1()
         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
      • 実行結果
        vba05_04.gif