Categories: VBA基礎

EXCEL VBA 繰り返し処理の使い分け(For Next・Do While Loop・Do Until Loop・Do Loop While)

EXCEL VBA 繰り返し処理の使い分け(For Next・Do While Loop・Do Until Loop・Do Loop While)

 

●はじめに
EXCEL VBAでは、同じ処理を繰り返すループ処理が複数有ります。「For Next ・Do While Loop・Do Until Loop・Do Loop While」など、ループ内で処理実行する内容や繰り返すループ条件に応じて使い方が様々あります。ループ条件が処理内容より、始めにある場合と終わりにある場合など、処理条件に応じて使い分ける必要があります。今回は、EXCEL VBAでの繰り返し処理に関する説明と使い方を交えて同じサンプルプログラムを使って説明を致します。
また、過去にもFor Next・Do Loop Whileなどの説明ページもありますので、参照して下さい。

 

 

EXCEL VBA For Next Stepの説明(ループ処理:前判定)

 

●書式の説明 【For Next  step】

※For Next Stepは、他のループステートメントと比べても、分かり易くかつStepを利用する事で、自在に加算・増減する数値を設定する事ができます。

For Next のStep(ステップ)の使い方
1ずつ加算For I = 1 to 10
[ 何も設定しない]
2ずつ加算For I = 2 to 10 Step 2
-1ずつ減算For I = 10 to 1 Step -1
-2ずつ減算For I = 10 to 0 Step -2

 

 

●プログラム説明 【For Next Step】サンプル①
下記のサンプルプログラムは、For Nextを利用したサンプルプログラムです。1月~12月をA列に順番に表示するプログラムです。

 

Sub for_next01()

    Dim I As Long
    
    Cells.Clear 'シートを全て消去(クリアー)

    For I = 1 To 12 'Iの値が1~12まで繰り返します。
    
        Range("A" & I) = I & "月"  'A列のセルに1月~12月まで1行ずつ下げながら転記します。
    
    Next I
    
End Sub

 

●実行前~実行後 ※プログラム実行後、A列に1月から12月まで表示されました。(画面クリックして拡大)

 

 

●プログラム説明 【For Next Step】サンプル②
下記のサンプルプログラムは、For Next Stepを利用したサンプルプログラムです。2~12まで変数をループさせます。変数の増分がStep+2で増分させるので、変数の値が2・4・6・・・と偶数月として順番にA列へ表示するサンプルプログラムです。

 

Sub for_next02()

    Dim I As Long
    
    Cells.Clear 'シートを全て消去(クリアー)

    For I = 2 To 12 Step 2 'Iの値が2~12まで+2増分しながら繰り返します。
    
        Range("A" & I / 2) = I & "月" 'A列のセルに偶数月を1行ずつ下げながら転記します。
    
    Next I
    
End Sub

 

●実行前~実行後 ※プログラム実行後、偶数月がA列に表示されました。(画面クリックして拡大)

 

●プログラム説明 【For Next Step】サンプル③
下記のサンプルプログラムは、For Next Stepを利用したサンプルプログラムです。Step-1を設定していますので、変数(I)を減らしながらループさせます。今回は、10階~1階までカウントダウンさせるように、A列に表示させます。

 

Sub for_next03()

    Dim I, F As Long
    
    Cells.Clear 'シートを全て消去(クリアー)

    F = 1 '1行目をセット
    
    For I = 10 To 1 Step -1 'Iの値が10~1まで-1減らしながら繰り返します。
    
        Range("A" & F) = I & "階"  'A列のセルに階数を1行ずつ下げながら転記します。
        F = F + 1 '行数を+1ずつ加算する。
        
    Next I
    
End Sub

 

●実行前~実行後 ※プログラム実行後、A列に10階から1階まで階数を減らしながらセルに転記されました。
(画面クリックして拡大)

 

●プログラム説明 【For Next Step】サンプル④ 2重ループ
下記のサンプルプログラムは、For Next Stepを利用したサンプルプログラムです。今回は、For Next を利用して2重ループさせたプログラムです。横5列×縦10行に0~49番までの背景色をセルに表示させます。

 

Sub for_next04()

    Dim I, L, C As Long
    
    Cells.Clear 'シートを全て消去(クリアー)
    
    C = 0  '背景色0番をセット
    
    For I = 1 To 10 'Iの値が1~10まで繰り返します。
    
        For L = 1 To 5
            
            With Cells(I, L)    'Cells I:行 L:列
                .Value = C      '背景色の番号を文字列で転記
                .Interior.ColorIndex = C  '背景色をセルにセット
            End With
            
            C = C + 1 '背景色に対して1を加算する。
        
        Next L
        
    Next I    
End Sub

 

●実行前~実行後 ※プログラム実行後、縦10行・横5列に0~49番までの背景色が表示されました。
(画面クリックして拡大)

 

 

 

EXCEL VBA Do While Loopの説明(ループ処理:前判定)

 

●書式の説明 【Do While Loop】

【注意】
For Next以外のループ処理は、条件式に該当するまで永久に繰り返しますので、変数などを加算するなど条件に一致するように変化させる必要があります。

例:    Do While I > 10
   I = I + 1     ‘Iが10を超えるまで加算する。
Loop

 

 

●プログラム説明 【Do While Loop】サンプル①
下記のサンプルプログラムは、Do While Loopを利用したサンプルプログラムです。1月~12月をA列に順番に表示するプログラムです。

 

Sub Do_While_Loop01()

    Dim I As Long
    
    Cells.Clear 'シートを全て消去(クリアー)

    I = 1  '初期値Iに1をセット
    
    Do While I <= 12  'Iの値が12以下まで繰り返します。
    
        Range("A" & I) = I & "月"  'A列のセルに1月~12月まで1行ずつ下げながら転記します。
        
        I = I + 1 '条件式のIの値が12を超えるまで加算します。
        
    Loop
    
End Sub

 

●実行前~実行後 ※プログラム実行後、A列に1月から12月まで表示されました。(画面クリックして拡大)

 

 

 

●プログラム説明 【Do While Loop】サンプル②
下記のサンプルプログラムは、Do While Loopを利用したサンプルプログラムです。2~12まで変数をループさせます。変数の増分が+2で増分させるので、変数の値が2・4・6・・・と偶数月として順番にA列へ表示するサンプルプログラムです。

 

Sub Do_While_Loop02()

    Dim I As Long
    
    Cells.Clear 'シートを全て消去(クリアー)

    I = 2   '初期値Iに2をセット
    
    Do While I <= 12    'Iの値が12以下まで繰り返します。
    
        Range("A" & I / 2) = I & "月" 'A列のセルに偶数月を1行ずつ下げながら転記します。
        I = I + 2
    Loop

End Sub

 

 

●実行前~実行後 ※プログラム実行後、偶数月がA列に表示されました。(画面クリックして拡大)

 

 

●プログラム説明 【Do While Loop】サンプル③
下記のサンプルプログラムは、Do While Loopを利用したサンプルプログラムです。変数(I)の値を-1ずつ減らしながらループさせます。今回は、10階~1階までカウントダウンさせるように、A列に表示させます。

 

Sub Do_While_Loop03()

    Dim I, F As Long
    
    Cells.Clear 'シートを全て消去(クリアー)

    F = 1      '1行目をセット
    I = 10     '10階・階数をセット
    
    Do While I >= 1 'Iの値が1以上は繰り返す。
    
        Range("A" & F) = I & "階"  'A列のセルに階数を1行ずつ下げながら転記します。
        F = F + 1         '行数を+1ずつ加算する。
        I = I - 1         '階数を-1にして階数を減らす
    Loop
    
End Sub

 

●実行前~実行後 ※プログラム実行後、A列に10階から1階まで階数を減らしながらセルに転記されました。
(画面クリックして拡大)

 

 

●プログラム説明 【Do While Loop】サンプル④ 2重ループ
下記のサンプルプログラムは、Do While Loopを利用したサンプルプログラムです。今回は、Do While Loop を利用して2重ループさせたプログラムです。横5列×縦10行に0~49番までの背景色をセルに表示させます。

 

Sub Do_While_Loop04()

    Dim I, L, C As Long
    
    Cells.Clear 'シートを全て消去(クリアー)
    
    C = 0  '背景色0番をセット
    
    I = 1
    
    Do While I <= 10 'Iの値が10以下まで繰り返します。。
        
        L = 1
        
        Do While L <= 5  'Lの値が5以下まで繰り返します。。
            
            With Cells(I, L)    'Cells I:行 L:列
                .Value = C      '背景色の番号を文字列で転記
                .Interior.ColorIndex = C  '背景色をセルにセット
            End With
            
            C = C + 1 '背景色に対して1を加算する。
            
            L = L + 1 'Lの値を加算します。Lは列
        Loop
        I = I + 1 'Iの値を加算します。Iは行
    Loop
    
End Sub

 

●実行前~実行後 ※プログラム実行後、縦10行・横5列に0~49番までの背景色が表示されました。
(画面クリックして拡大)

 

 

 

EXCEL VBA Do Until Loopの説明(ループ処理:前判定)

 

●書式の説明 【Do Until Loop】

【注意】
For Next以外のループ処理は、条件式に該当するまで永久に繰り返しますので、変数などを加算するなど条件に一致するように変化させる必要があります。

例:    Do Until I > 10
   I = I + 1     ‘Iが10を超えるまで加算する。
Loop

 

 

 ●プログラム説明 【Do Until Loop】サンプル①
下記のサンプルプログラムは、Do Until Loopを利用したサンプルプログラムです。1月~12月を順番にA列へ表示するプログラムです。

 

Sub Do_Until_Loop01()

    Dim I As Long
    
    Cells.Clear 'シートを全て消去(クリアー)

    I = 1  '初期値Iに1をセット
    
    Do Until I > 12     'Iの値が12を超えるまで繰り返します。
    
        Range("A" & I) = I & "月"  'A列のセルに1月~12月まで1行ずつ下げながら転記します。
        
        I = I + 1 '条件式のIの値が12を超えるまで加算します。
        
    Loop
    
End Sub

 

 

●実行前~実行後 ※プログラム実行後、A列に1月から12月まで表示されました。(画面クリックして拡大)

 

 

 

●プログラム説明 【Do Until Loop】サンプル②
下記のサンプルプログラムは、Do Until Loopを利用したサンプルプログラムです。2~12まで変数をループさせます。変数(I)の増分が+2で増分させるので、変数の値が2・4・6・・・と偶数月としてA列に順番に表示するサンプルプログラムです。

 

Sub Do_Until_Loop02()

    Dim I As Long
    
    Cells.Clear 'シートを全て消去(クリアー)

    I = 2   '初期値Iに2をセット
    
    Do Until I > 12       'Iの値が12を超えるまで繰り返します。
    
        Range("A" & I / 2) = I & "月" 'A列のセルに偶数月を1行ずつ下げながら転記します。
        I = I + 2
    Loop

End Sub

 

●実行前~実行後 ※プログラム実行後、偶数月がA列に表示されました。(画面クリックして拡大)

 

 

 

 ●プログラム説明 【Do Until Loop】サンプル③
下記のサンプルプログラムは、Do Until Loopを利用したサンプルプログラムです。変数(I)の値を-1ずつ減らしながらループさせます。今回は、10階~1階までカウントダウンさせるように、A列に表示させます。

 

Sub Do_Until_Loop03()

    Dim I, F As Long
    
    Cells.Clear 'シートを全て消去(クリアー)

    F = 1      '1行目をセット
    I = 10     '10階・階数をセット
    
    Do Until I < 1  'Iの値が1未満になるまで繰り返す。
    
        Range("A" & F) = I & "階"  'A列のセルに階数を1行ずつ下げながら転記します。
        F = F + 1         '行数を+1ずつ加算する。
        I = I - 1         '階数を-1にして階数を減らす
    Loop
    
End Sub

 

●実行前~実行後 ※プログラム実行後、A列に10階から1階まで階数を減らしながらセルに転記されました。
(画面クリックして拡大)

 

 

 

●プログラム説明 【Do Until Loop】サンプル④ 2重ループ
下記のサンプルプログラムは、Do Until Loopを利用したサンプルプログラムです。今回は、Do Until Loop を利用して2重ループさせたプログラムです。横5列×縦10行に0~49番までの背景色をセルに表示させます。

 

Sub Do_Until_Loop04()

    Dim I, L, C As Long
    
    Cells.Clear 'シートを全て消去(クリアー)
    
    C = 0  '背景色0番をセット
    
    I = 1
    
    Do Until I > 10  'Iの値が10を超えるまで繰り返します。。
        
        L = 1
        
        Do Until L > 5    'Lの値が5を超えるまで繰り返します。。
            
            With Cells(I, L)    'Cells I:行 L:列
                .Value = C      '背景色の番号を文字列で転記
                .Interior.ColorIndex = C  '背景色をセルにセット
            End With
            
            C = C + 1 '背景色に対して1を加算する。
            
            L = L + 1 'Lの値を加算します。Lは列
        Loop
        I = I + 1 'Iの値を加算します。Iは行
    Loop
    
End Sub

 

●実行前~実行後 ※プログラム実行後、縦10行・横5列に0~49番までの背景色が表示されました。
(画面クリックして拡大)

 

 

 

EXCEL VBA Do Until Loopの説明(ループ処理:後判定)

 

●書式の説明 【Do Until Loop】終わり判定(1回は処理を実行する)

【注意】
For Next以外のループ処理は、条件式に該当するまで永久に繰り返しますので、変数などを加算するなど条件に一致するように変化させる必要があります。

例:    Do
          I = I + 1     ‘Iが10を超えるまで加算する。
Loop Until I > 10

 

 

●プログラム説明【Do Until Loop】サンプル①  (終わり判定)
下記のサンプルプログラムは、Do Until Loopを利用したサンプルプログラムです。1月~12月を順番にA列へ表示するプログラムです。
※終わり判定でループ処理を実行しています。

 

Sub Do_Loop_While01()

    Dim I As Long
    
    Cells.Clear 'シートを全て消去(クリアー)

    I = 0  '初期値Iに0をセット
    
    Do
    
        I = I + 1 '条件式のIを加算します。
    
        Range("A" & I) = I & "月"  'A列のセルに1月~12月まで1行ずつ下げながら転記します。
        
    Loop While I < 12     'Iの値が12未満まで繰り返します。
        

End Sub

 

 

●実行前~実行後 ※プログラム実行後、A列に1月から12月まで表示されました。(画面クリックして拡大)

 

 

 

●プログラム説明【Do Until Loop】サンプル②  (終わり判定)
下記のサンプルプログラムは、Do Until Loopを利用したサンプルプログラムです。A列に表示されている名簿リストをB列に名簿リストを転記するサンプルプログラムです。

 

Sub Do_Loop_While02()

    Dim I As Long
    
    I = 0  '初期値Iに0をセット
    
    Do
    
        I = I + 1 '条件式のIの値を加算します。
    
        Range("B" & I) = Range("A" & I)
    
    Loop While Range("A" & I) <> ""     'A列の文字列が無くなるまで繰り返します。
        
End Sub

 

●実行前~実行後 ※プログラム実行後、A列の名簿リストがB列に転記されました。(画面クリックして拡大)

 

 

 

●プログラム説明【Do Until Loop】サンプル③  (終わり判定)
下記のサンプルプログラムは、上記サンプルプログラムの応用になります。A列の名簿リストの内容がB列に転記する際に何行目まで転記するか、指定する事が出来ます。

 

Sub Do_Loop_While03()

    Dim I, E As Long
    
    I = 0  '初期値Iに0をセット
    
    E = InputBox("何行目まで転記しますか?")
    
    Do
    
        I = I + 1 '条件式のIの値を加算します。
    
        Range("B" & I) = Range("A" & I)
    
    Loop While E > I     '入力した数値を超えるまで繰り返します。
        
End Sub

 

●実行前~実行後 ※プログラム実行後、A列に10階から1階まで階数を減らしながらセルに転記されました。
(画面クリックして拡大)

 

 

 

EXCEL VBA Do While Loopの説明(ループ処理:後判定)

 

●書式の説明 【Do While Loop】終わり判定(1回は処理を実行する)

【注意】
For Next以外のループ処理は、条件式に該当するまで永久に繰り返しますので、変数などを加算するなど条件に一致するように変化させる必要があります。

例:    Do
     I = I + 1     ‘Iが10を超えるまで加算する。
Loop  While I > 10

 

 

●プログラム説明 【Do While Loop】サンプル① (終わり判定)
下記のサンプルプログラムは、Do While Loopを利用したサンプルプログラムです。1月~12月をA列に順番に表示するプログラムです。

 

Sub Do_Loop_While01()

    Dim I As Long
    
    Cells.Clear 'シートを全て消去(クリアー)

    I = 0  '初期値Iに0をセット
    
    Do
    
        I = I + 1 '条件式のIを加算します。
    
        Range("A" & I) = I & "月"  'A列のセルに1月~12月まで1行ずつ下げながら転記します。
        
    Loop While I < 12     'Iの値が12未満まで繰り返します。
        
End Sub

 

●実行前~実行後 ※プログラム実行後、A列に1月から12月まで表示されました。(画面クリックして拡大)

 

 

 

●プログラム説明【Do While Loop】サンプル②  (終わり判定)
下記のサンプルプログラムは、Do While Loopを利用したサンプルプログラムです。A列に表示されている名簿リストをB列に名簿リストを転記するサンプルプログラムです。

 

Sub Do_Loop_While02()

    Dim I As Long
    
    I = 0  '初期値Iに0をセット
    
    Do
    
        I = I + 1 '条件式のIの値を加算します。
    
        Range("B" & I) = Range("A" & I)
    
    Loop While Range("A" & I) <> ""     'A列の文字列が無くなるまで繰り返します。
        
End Sub

 

●実行前~実行後 ※プログラム実行後、A列の名簿リストがB列に転記されました。(画面クリックして拡大)

 

 

●プログラム説明【Do While Loop】サンプル③  (終わり判定)
下記のサンプルプログラムは、上記サンプルプログラムの応用になります。A列の名簿リストの内容がB列に転記する際に何行目まで転記するか、指定する事が出来ます。

 

Sub Do_Loop_While03()

    Dim I, E As Long
    
    I = 0  '初期値Iに0をセット
    
    E = InputBox("何行目まで転記しますか?")
    
    Do
    
        I = I + 1 '条件式のIの値を加算します。
    
        Range("B" & I) = Range("A" & I)
    
    Loop While E > I     '入力した数値を超えるまで繰り返します。
        
End Sub

 

●実行前~実行後 ※(画面クリックして拡大)

 

 

最後まで、ご覧いただきまして誠に有難うございました。
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。

 

AKIRA