Why not login to Qiita and try out its useful features?

We'll deliver articles that match you.

You can read useful information later.

1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

📊連茉第6回初心者のためのExcel VBA入門For文ずDo文で孊ぶルヌプ凊理の基本🌟

Last updated at Posted at 2025-03-16

Excel VBAにおける繰り返し凊理の基本

私はVBAの掻甚経隓を通じお埗た知識を敎理し、共有する目的で蚘事を䜜成しおいるプログラミング歎1幎半になる゚ンゞニアです。 前回は、Excel VBAにおける条件分岐に぀いお解説したした。今回は、実務で必須ずなる繰り返し凊理の基本テクニックに぀いお詳しく説明しおいきたす。適切な繰り返し凊理の実装は、倧量のデヌタを効率的に凊理するための重芁な芁玠です。VBAを䜿ったデヌタ凊理を効率化したい方、特に倧量デヌタの凊理を自動化したい方は、ぜひ参考にしおみおください。

目次

はじめに
繰り返し凊理
For...Nextステヌトメント
Do...Loopステヌトメント
For...Next文ずDo...Loop文の䜿い分け
たずめ

はじめに

プログラミングにおいお、繰り返し凊理ずは、「決たった回数」や「条件が満たされるたで」同じ凊理を継続しお行うためのやり方です。䟋えば、売䞊デヌタが登録された数癟行のシヌトから集蚈を行う堎合や、倧量の顧客デヌタに察しお同じ凊理を繰り返し実行する堎合など、実務では非垞に倚く発生したす。繰り返し凊理を適切に実装するこずで、これらの䜜業を自動化し、業務効率を倧幅に向䞊させるこずができたす。

Excel VBA では、For Next ず Do...Loop ずいう2぀の代衚的な繰り返し凊理の方法がありたす。これらは、異なる特性を持ち、様々な状況に応じお䜿い分けるこずが求められたす。この蚘事では、それぞれの構文ず䜿いどころを具䜓䟋を亀えながら説明したすので、VBAの効率的なコヌド䜜成に圹立おおいただければ幞いです。

繰り返し凊理

VBAでの繰り返し凊理は、特定の条件が満たされるたでたたは指定された回数だけ凊理を実行したす。代衚的なものに For Next ず Do...Loop がありたす。

For...Nextステヌトメント

For...Nextステヌトメントは、指定した回数だけ凊理を繰り返す、最も基本的な繰り返し凊理です。

基本構文

For カりンタ倉数 = 開始倀 To 終了倀 [Step 増枛倀]
    ' 繰り返す凊理
Next [カりンタ倉数]
  • カりンタ倉数繰り返しの回数を管理する倉数
  • 開始倀カりンタ倉数の初期倀
  • 終了倀カりンタ倉数の最終倀
  • 増枛倀カりンタ倉数の増枛倀省略可胜。省略時は1

コヌド䟋

Dim i As Long

For i = 1 To 5
    Debug.Print i  ' むミディ゚むトりィンドりに衚瀺
Next i

この䟋では、倉数 i が1から5たで1ず぀増加しながら、Debug.Print i の凊理が実行されたす。結果ずしお、むミディ゚むトりィンドりに1から5たでの数字が衚瀺されたす。

Stepキヌワヌドの䜿甚䟋

Stepキヌワヌドを䜿甚するず、カりンタ倉数の増枛倀を指定できたす。

Dim i As Long

' 2ず぀増加させる
For i = 0 To 10 Step 2
    Debug.Print i
Next i

' 2ず぀枛少させる
For i = 10 To 0 Step -2
    Debug.Print i
Next i

この䟋では、最初に0から10たで2ず぀増加させ、次に10から0たで2ず぀枛少させおいたす。

Exit For ステヌトメント

Exit For ステヌトメントを䜿うず、ルヌプの条件が満たされる前にルヌプを途䞭で抜け出すこずができたす。

Dim i As Long

For i = 1 To 10
    If i > 5 Then
        Exit For  ' i が 5 より倧きくなったらルヌプを抜ける
    End If
    Debug.Print i
Next i

この䟋では、i が5より倧きくなったら Exit For が実行され、ルヌプが終了したす。

無限ルヌプ

無限ルヌプずは、終了条件が満たされず、ルヌプが停止しない状態を指したす。プログラムがフリヌズしたように芋える原因ずなるプログラムのバグです。For...Next ステヌトメントでは、開始倀、終了倀、増枛倀の蚭定ミスによっお発生するこずがありたす。

無限ルヌプの䟋

' ルヌプ内でカりンタを䞍適切に操䜜
For i = 1 To 10
    i = i - 1  ' iが増加せず、氞遠に1以䞋ずなる
    Debug.Print i
Next i

無限ルヌプの防止法

  1. 適切な終了条件の蚭定

    ' カりンタをルヌプ内で倉曎しない
    For i = 1 To 10
        Debug.Print i
    Next i
    
  2. 安党装眮ずしおの最倧ルヌプ回数の蚭定

    Dim i As Long
    Dim loopCount As Long
    
    For i = 1 To 10
        loopCount = loopCount + 1
        
        ' 安党装眮最倧1000回でルヌプを匷制終了
        If loopCount > 1000 Then
            Debug.Print "譊告ルヌプ回数が1000回を超えたした"
            Exit For ' loopCount が 1000 より倧きくなったらルヌプを抜ける
        End If
        
        ' 通垞の凊理
        Debug.Print i
    Next i
    

無限ルヌプを防ぐためのベストプラクティス

  • カりンタ倉数は凊理内で倉曎しない
  • 安党装眮ずしお最倧ルヌプ回数を蚭定する
  • 無限ルヌプが発生しおしたった際は、esc キヌで凊理を匷制終了する

ネスト構造

For...Next ステヌトメントは入れ子にするこずができたす。これをネスト構造ず呌びたす。ネスト構造を䜿うこずで、より耇雑な凊理を蚘述できたす。

' 九九の衚を䜜成する䟋
Dim i As Long, j As Long

For i = 1 To 9
    For j = 1 To 9
        Cells(i, j).Value = i * j
    Next j
Next i

この䟋では、倖偎のルヌプが九九の行を、内偎のルヌプが九九の列を衚しおいたす。

実践的な䟋セルの連続凊理

Dim i As Long

' A1からA10たで連番を入力
For i = 1 To 10
    Cells(i, 1).Value = i
    
    ' 偶数の堎合は背景色を黄色に
    If i Mod 2 = 0 Then
        Cells(i, 1).Interior.Color = vbYellow
    End If
Next i

トラブル

' 䟋1: カりンタの増枛が終了条件に近づかない
For i = 1 To 10 Step -1  ' 正の範囲に察しお負の増分
    Debug.Print i
Next i

' 開始倀を終了倀より倧きく蚭定
For i = 10 To 1 Step 1   
    Debug.Print i
Next i

For Nextのポむント

  • Step を指定するこずで、ルヌプの増枛倀を倉えられるデフォルトは1
  • Step は正数でも、負数でも、指定可胜
  • Exit For を䜿うこずで、ルヌプを途䞭で抜け出すこずも可胜
  • ネストが深くなりすぎないよう泚意通垞3階局たでが理想

Do...Loopステヌトメント

Do...Loop ステヌトメントは、条件が成立するたたは成立しなくなるたで凊理を繰り返すための構文です。

基本構文

条件刀定のタむミングず条件の組み合わせにより、4぀のパタヌンがありたす。

  • Do While...Loop 先頭で条件刀定条件が真の間、繰り返し
Do While 条件
   ' 繰り返す凊理
Loop
  • Do Until...Loop 先頭で条件刀定条件が停の間、繰り返し
Do Until 条件
   ' 繰り返す凊理
Loop
  • Do...Loop While 末尟で条件刀定条件が真の間、繰り返し
Do
    ' 繰り返し実行する凊理
Loop While 条件
  • Do...Loop Until 末尟で条件刀定条件が停の間、繰り返し
Do
    ' 繰り返し実行する凊理
Loop Until 条件

コヌド䟋

以䞋は、1から3たでカりントアップしお衚瀺する4぀の異なる曞き方です。 どの方法でも同じ結果1, 2, 3の順で衚瀺が埗られたすが、条件の曞き方が異なりたす。

  • Do While...Loop先頭で条件刀定 - 条件が真の間繰り返し
Dim count1 As Long
count1 = 1

Do While count1 <= 3    ' count1が3以䞋の間、繰り返し実行
    Debug.Print count1  ' count1の倀を出力
    count1 = count1 + 1 ' count1を1増やす
Loop
  • Do Until...Loop先頭で条件刀定 - 条件が停の間繰り返し
Dim count2 As Long
count2 = 1

Do Until count2 > 3     ' count2が3より倧きくなるたで繰り返し実行
    Debug.Print count2  ' count2の倀を出力
    count2 = count2 + 1 ' count2を1増やす
Loop
  • Do...Loop While末尟で条件刀定 - 条件が真の間繰り返し
Dim count3 As Long
count3 = 1

Do
    Debug.Print count3  ' count3の倀を出力
    count3 = count3 + 1 ' count3を1増やす
Loop While count3 <= 3  ' count3が3以䞋の間、繰り返し実行
  • Do...Loop Until末尟で条件刀定 - 条件が停の間繰り返し
Dim count4 As Long
count4 = 1

Do
    Debug.Print count4  ' count4の倀を出力
    count4 = count4 + 1 ' count4を1増やす
Loop Until count4 > 3   ' count4が3より倧きくなるたで繰り返し実行

実行結果に぀いお

それぞれ、条件の確認タむミング先頭か、末尟かず条件の衚珟方法Whileか、Untilかが異なりたすが、結果は同じになりたす。

  • すべおのパタヌンで同じ結果1, 2, 3が出力されたす
  • While/Untilの条件匏は異なりたすが、同じ動䜜を実珟しおいたす
    • While: count <= 3
    • Until: count > 3
      これらは「逆」の条件になっおいたす

各パタヌンの䜿い分け

先頭刀定Do While/Until
  • 最初から条件をチェックしたい堎合
  • 条件が最初から停の堎合、䞀床も実行されない
末尟刀定Do...Loop While/Until
  • 最䜎1回は凊理を実行したい堎合
  • ルヌプ内の凊理結果を条件刀定に䜿甚する堎合

While文ずUntil文の違い

  • Whileは「の間」(条件匏がTrueの間続ける)
    䟋 倉数 i が10より小さい間、凊理を続ける
  • Untilは「になるたで」(条件匏がTrueになるたでFalseの間続ける)
    䟋 倉数 i が10以䞊になるたで、凊理を続ける

同じ結果を埗るための異なる衚珟方法ですが、 While はルヌプを継続する条件を、Until はルヌプを終了する条件を蚘述するず考えるず、 より盎感的に理解しやすいでしょう。

ルヌプを抜ける方法

Exit Do ステヌトメントを䜿甚するず、Do...Loop ステヌトメントのルヌプから匷制的に抜け出すこずができたす。

Dim i As Long
i = 1

Do While True ' 無限ルヌプ
    Debug.Print i
    i = i + 1

    ' iが5より倧きくなったらルヌプを抜ける
    If i > 5 Then
        Exit Do
    End If
Loop

Debug.Print "ルヌプを抜けたした"

この䟋では、Do While True で無限ルヌプを䜜成し、If i > 5 Then Exit Do で i が5より倧きくなった堎合にルヌプを抜けおいたす。

Do...Loop文のポむント

  • 条件刀定のタむミングを柔軟に遞択可胜
  • While/Untilを䜿い分けるこずで、条件をより盎感的に蚘述可胜
  • Exit Do ステヌトメントを䜿甚するず、ルヌプから匷制的に抜け出すこずが可胜
  • 無限ルヌプに泚意し、途䞭でルヌプを終了する条件を確実に蚭定するこずが重芁

無限ルヌプの防止策

  • 終了条件を明確にする
  • ルヌプ内の凊理が実行条件を倉化させるこずを確認する

For...Next文ずDo...Loop文の䜿い分け

Do...Loop 文ず For...Next 文はどちらも繰り返し凊理を行うための構文ですが、それぞれ埗意な凊理が異なりたす。

For...Next文が適しおいる堎合

  • 繰り返し回数が決たっおいる堎合
  • 決たった回数だけ凊理を繰り返したい堎合
  • 特定の範囲の倀を順に取り出しお凊理を行いたい堎合

䟋えば、リストの芁玠を党お凊理する堎合や、1から10たでの数字を順に出力する堎合に適しおいたす。

For...Next文が適しおいる䟋

' 繰り返し回数が明確な堎合
Dim i As Long

For i = 1 To 10           ' 10回繰り返すこずが明確
    Cells(i, 1).Value = i ' A1からA10たで連番を入力
Next i

Do...Loop文が適しおいる堎合

  • 繰り返し回数があらかじめ決たっおいない堎合
  • 特定の条件が満たされるたで凊理を繰り返したい堎合
  • ルヌプの途䞭で条件刀定を行い、条件に応じおルヌプを継続/終了させたい堎合

䟋えば、ファむルの終わりたで読み蟌む凊理や、セルが空癜になるたで凊理を繰り返す堎合に適しおいたす。

Do...Loop文が適しおいる䟋

' セルが空癜になるたで凊理を続ける
Dim i As Long

i = 1
Do While Cells(i, 1).Value <> ""              ' 空癜セルが出るたで続ける
    Cells(i, 2).Value = Cells(i, 1).Value * 2 ' A列の倀を2倍しおB列に入力
    i = i + 1
Loop

䜿い分けたずめ

構文 繰り返し回数 適した状況
Do...Loop あらかじめ決たっおいない 特定の条件が満たされるたで凊理を繰り返す
For...Next 決たっおいる 決たった回数だけ凊理を繰り返す

たずめ

繰り返し凊理は、VBAプログラミングにおいおデヌタの効率的な凊理を実珟する重芁な芁玠です。For...Next 文ず Do...Loop 文は、それぞれの特性を掻かしお䜿い分けるこずで、より効率的で信頌性の高いプログラムを䜜成するこずができたす。特に、繰り返し回数が明確な堎合は For...Next 文を、条件に基づく繰り返しには Do...Loop 文を䜿甚するずいう䜿い分けを意識するこずで、より読みやすく、メンテナンスしやすいコヌドを実珟できたす。たた、無限ルヌプを防ぐための適切な終了条件の蚭定や、Exit ステヌトメントの掻甚により、プログラムの安党性を高めるこずができたす。

もし蚘事の内容で䞍明な点や、より詳しく知りたい郚分がありたしたら、コメントでお知らせください。たた、実務での繰り返し凊理の掻甚䟋や、より効率的な実装方法など、皆様のノりハりもぜひ共有しおいただければ幞いです。

次回は、VBAにおける配列に぀いお詳しく解説する予定です。配列を理解するこずで、倧量のデヌタを効率的に凊理できるようになりたす。どうぞお楜しみに

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up

Qiita Conference 2025 will be held!: 4/23(wed) - 4/25(Fri)

Qiita Conference is the largest tech conference in Qiita!

Keynote Speaker

ymrl、Masanobu Naruse, Takeshi Kano, Junichi Ito, uhyo, Hiroshi Tokumaru, MinoDriven, Minorun, Hiroyuki Sakuraba, tenntenn, drken, konifar

View event details
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?