Excel VBAループ-For Each,For Next,Do While,Nested&More
VBAで効果的に機能するには、ループを理解する必要があります。
ループを使用すると、コードブロックを設定回数繰り返したり、オブジェクトセット内の各オブジェクトでコードブロックを繰り返したりできます。
まず、ループが可能なものを示すためのいくつかの例を示します。 その後、私たちはあなたにループについてのすべてをお教えします。
VBA Loop Quick Examples
For Each Loops
for Each Loopsワークブック内のすべてのワークシートや範囲内のすべてのセルなど、コレクション内のすべてのオブジェクこのコードは、ブック内のすべてのワークシートをループし、各シートを再表示します。
範囲内のすべてのセルをループこのコードは、セルの値が負、正、またはゼロであるかどうかをテストし、セルの範囲をループします。 |
範囲内のすべてのセルをループ
このコードは、セルの次のループのための
次のループのための
“for”ループの別のタイプはFor次のループです。 For Nextループを使用すると、整数をループすることができます。
このコードは、1から10までの整数をループし、それぞれにメッセージボックスを表示します:/div>
do whileループ
do whileループは条件が満たされている間ループします。 このコードはまた、整数1から10をループし、それぞれをメッセージボックスで表示します。/div>
これについては、以下で説明しますが、次のようになります。 Do WhileまたはDo Untilループを作成するときは、終わることのないループを作成しないように、非常に注意する必要があります。
VBAループビルダー
これは、プレミアムVBAアドインAutoMacroの「ループビルダー」のスクリーンショットです。 ループビルダーを使用すると、さまざまなオブジェクトや数字をループするループをすばやく簡単に構築できます。 各オブジェクトに対してアクションを実行したり、特定の条件を満たすオブジェクトのみを選択したりできます。
アドインには、他の多くのコードビルダー、広範なVBAコードライブラリ、および各種コーディングツールも含まれています。 これは、任意のVBA開発者のために持っている必要があります。
ここでは、さまざまなタイプのループについて詳しく説明します。
VBA For Next Loop
For Loop構文
For Next Loopでは、コードブロックを指定した回数繰り返すことができます。 構文は次のとおりです:
1
2
3
4
5
|
For Counter = Start to End
Next
|
Where the items in brackets are optional.
- – Declares the counter variable. Required if Option Explicit is declared at the top of your module.
- Counter–カウントに使用される整数変数
- Start–開始値(例。 1)
- End–終了値(Ex. 10)
- –すべての1つの整数ではなく、すべてのn個の整数を数えることができます。 また、負の値で逆にすることもできます(例。 Step–1)
- –次のループのために
- Next-Closing文を繰り返すコード。 あなたはカウンターを含めるかどうかを含めることができます。 ただし、コードを読みやすくするため、カウンタを含めることを強くお勧めします。
それが混乱している場合は、心配しないでください。 いくつかの例を検討します:このコードは、For-Nextループを使用して10にカウントされます。
Count to10
このコードは、For-Nextループを使用して10にカウントされます。
:/div>
ループステップの場合
10にカウント–偶数のみ
これは、次のn
ループステップの場合
10にカウント-偶数のみ
コードは偶数を数えるだけで10にカウントされます:/div>
「ステップ2」を追加しました。 これにより、forループはカウンタを2ずつ”ステップ”するように指示します。 負のステップ値を使用して逆にステップすることもできます。
For Loop Step–Inverse
Countdown from10
このコードは10からカウントダウンします:/div>
削除
削除
削除
削除
削除
削除
削除
削除
削除
削除
削除
削除
削除
削除
削除
削除
削除
削除 セルが空白の場合の行
削除
削除
削除
削除
削除
削除
削除
削除
削除
削除
削除
削除
削除
削除
削除
削除 セルが空白の場合の行
削除
削除
削除
削除
削除
削除
削除
削除
削除
削除
削除
削除
削除
削除 セルが空白の場合の行
削除
削除
削除
削除
削除
削除
削除
削除
削除
削除
削除
削除 セルが空白の場合の行
削除
削除
削除
削除
削除
削除
削除
削除
削除
削除 セルが空白の場合の行
削除
削除
削除
削除
削除
削除
削除
削除 セルが空白の場合の行
削除
削除
削除
削除
削除
削除 セルが空白の場合の行
削除
削除
削除
削除 セルが空白の場合の行
削除
削除 セルが空白の場合の行
私は最も頻繁に負のステップFor-Loopを使用してセルの範囲をループし、特定の基準を満たす行を削除しました。 上の行から下の行にループすると、行を削除するとカウンターが台無しになります。
この例では、空白のセルを持つ行を削除します(一番下の行から始まります)。
ネストされたForループ
あるForループを別のForループの中に”ネスト”することができます。 入れ子になったForループを使用して乗算表を作成します:/div>
exit For
exit forステートメントを使用すると、for nextループをすぐに終了できます。
通常、Exit ForをIf文とともに使用し、特定の条件が満たされた場合にFor Nextループを終了します。
たとえば、Forループを使用してセルを検索することができます。 そのセルが見つかったら、ループを終了してコードを高速化できます。見つかった場合、コードはセルを選択し、見つかったエラーを警告し、ループを終了します。
重要:ネストされたForループの場合、Exit Forは現在のForループを終了し、すべVBAには、Visual Basicにある”Continue”コマンドがありません。 代わりに、”Exit”を使用する必要があります。
VBA For Each Loop
VBA For Each Loopはコレクション内のすべてのオブジェクトをループします:
- 範囲内のすべてのセル
- ワークブック内のすべてのワークシート
- ワークシート内のすべての図形
- すべての開いているワークブック
ネストされたFor Eachループを使用することもできます。
- すべてのワークシート上の範囲内のすべてのセル
- すべてのワークシート上のすべての図形
- すべての開いているワークブック内のすべてのシート
- すべての開いているワークブック内のすべてのシート
- すべての開いているワークブック内のすべてのシート
- だから…
構文は次のとおりです:
1
2
3
|
For Each Object in Collection
Next
|
Where:
For Each Cell in Range
This code will loop through each cell in a range:
For Each Worksheet in Workbook
This code will loop through all worksheets in a workbook, unprotecting each sheet:
1
2
3
4
5
6
7
8
9
|
Sub ForEachSheet_inWorkbook()
Dim ws As Worksheet
For Each ws In Worksheets
ws.”パスワード”の保護を解除します
Next ws
End Sub
|
開いているワークブックごとに
このコードは、開いているすべてのワークブックを保存して閉じます:/div>
ワークシート内の各図形について
このコードは、アクティブなシート内のすべての図形を削除します。/div>
ワークブック内の各ワークシートの各形状について
また、次のshp
ワークブック内の各ワークシートの各形状について
また、次のshp
For Each–IF Loop
前に述べたように、ループ内でIf文を使用して、特定の条件が満たされている場合このコードは、範囲内のすべての空白行を非表示にします。
VBA Do Whileループ
VBA Do WhileとDo Until(次のセクションを参照)は非常に似ています。 条件が満たされている間(または満たされるまで)、ループが繰り返されます。
Do Whileループは、条件が満たされている間にループを繰り返します。/div>
3
333333333333333333333333333333div>
where:
- 条件–条件を変更するには、
- 条件–条件を変更するには、
- 条件-条件を変更するには、
- 条件-条件を変更するには、
- 条件-条件を変更するには、
- 条件-条件を変更するには、
- test
- -繰り返すコードブロック
ループの最後に条件を指定してdo whileループを設定することもできます:
123DoLoop While ConditionWe will demo each one and show how they differ:
Do While
Here is the Do While loop example we demonstrated previously:/div>
567811 msgbox nn=n+1ループend subループWhile
ここで、条件をループの最後に移動する以外は、同じ手順を実行しましょう:/div>
5678vbaはループまで実行します
戻るまで
戻るまで
戻るまで
戻るまで
戻るまで
戻るまで
戻るまで
戻るまで
戻るまで
戻るまで
戻るまで
戻るまで
戻るまで
戻るまで
戻るまで
戻るまで
戻るまで
戻るまで
戻るまで
戻る ループは、特定の条件が満たされるまでループを繰り返します。 構文は基本的にDo Whileループと同じです。
123条件まで行いますループ同様に、条件はループの開始または終了に行くことができます:
123DoLoop Until ConditionDo Until
This do Until loop will count to 10, like our previous examples
12310 msgbox nn=n+1ループend subループまで
このループまでループは10にカウント:/div>
5678=n+1 nまでループ>10サブ終了Exit Do Loop
Exit Forを使用してForループを終了するのと同様に、Exit Doコマンドを使用してDoループをすぐに終了します
ここでは、exit doの例です。 endまたはbreak loop
上記のように、exit forまたはexit doを使用してループを終了することができます:
1Exit For1Exit DoHowever, these commands must be added to your code before you run あなたのループ。現在実行中のループを「中断」しようとしている場合は、キーボードでESCまたはCTRL+Pause Breakを押してみることができます。
しかし、これは動作しない場合があります。 うまくいかない場合は、ループが終了するのを待つか、無限ループの場合はCTRL+ALT+Deleteを使用してExcelを強制的に閉じる必要があります。誤って無限ループを作成してExcelを再起動する方が簡単で、作業が失われる可能性があります。
これが私がDoループを避けようとする理由です。
その他のループ例
行をループ
これは、列内のすべての行をループします:
列をループ
これは行のすべての列をループします:
フォルダ内のファイルをループします
このコードは、フォルダ内のすべてのファイルをループし、リストを作成します。
配列をループします
このコードは、配列をループします’arrlist’:/div>
123123for i=lbound(arrlist)to ubound(arrlist)msgbox arrlist(i)next ilbound関数は”下限”を取得します配列の”とuboundは”上限”を取得します。
Access VBAのループ
上記の例のほとんどは、Access VBAでも機能します。 ただし、Accessでは、rangeオブジェクトではなくRecordsetオブジェクトをループします。/div>
567891011121314151617181919191919191919191919191919/div>サブloopthroughrecords()エラー時に次を再開データベースとしてdbsを薄暗くレコードセットとしてdbs=currentdbを設定Set rst = dbs.OpenRecordset(“tblClients”, dbOpenDynaset)With rst.MoveLast.MoveFirstDo Until .EOF = TrueMsgBox (rst.Fields(“ClientName”)).MoveNextLoopEnd Withrst.CloseSet rst = NothingSet dbs = NothingEnd Sub
- 条件-条件を変更するには、
- 条件-条件を変更するには、
- 条件-条件を変更するには、
- 条件-条件を変更するには、
- 条件–条件を変更するには、