VBA のループ

VBA プログラムが同じアクション セットを連続して複数回実行する必要がある場合があります (つまり、同じコード ブロックを複数回繰り返す)。 これは、VBA ループを使用して実行できます。

VBA ループには次のものが含まれます。

次に、これらの各サイクルを詳しく見ていきます。

Visual Basic の for ループ演算子

ループ演算子の構造   Visual Basic では、次の XNUMX つの形式のいずれかで編成できます。ループとして 次へ またはループとして それぞれについて.

サイクル「…次へ」

サイクル 次へ 指定された範囲から連続して値を取得する変数を使用します。 変数の値が変更されるたびに、サイクルの本体に含まれるアクションが実行されます。 これは、簡単な例から簡単に理解できます。

i = 1 から 10 の場合 合計 = 合計 + iArray(i) 次の i

この単純なループで 次へ 変数が使用されます i、値 1、2、3、… 10 を順番に取り、これらの値のそれぞれについて、ループ内の VBA コードが実行されます。 したがって、このループは配列の要素を合計します。 iArray 変数内 トータル.

上記の例では、ループのインクリメントが指定されていないため、変数をインクリメントするには i 1 から 10 まで、デフォルトはインクリメントです 1…しかし、場合によっては、ループに異なるインクリメント値を使用する必要があります。 これは、キーワードを使用して行うことができます 手順次の簡単な例に示すように。

For d = 0 to 10 Step 0.1 dTotal = dTotal + d 次の d

上記の例では、増分ステップは次のように設定されているため、 0.1、次に変数 d合計 サイクルの各繰り返しは、値0.0、0.1、0.2、0.3、… 9.9、10.0を取ります。

VBA でループ ステップを決定するには、次のように負の値を使用できます。

For i = 10 To 1 Step -1 iArray(i) = i 次の i

ここで増分は -1、したがって変数 i サイクルが繰り返されるたびに、値は10、9、8、… 1になります。

「For Each」をループする

サイクル それぞれについて 周期に似ている 次へ、ただし、カウンター変数の値のシーケンスを反復する代わりに、ループ それぞれについて 指定されたオブジェクト グループ内の各オブジェクトに対して一連のアクションを実行します。 次の例では、ループを使用しています それぞれについて 現在の Excel ワークブックのすべてのシートを列挙します。

ワークシートの各 wSheet のワークシートとして Dim wSheet MsgBox "Найден лист: " & wSheet.Name Next wSheet

ループ割り込み文「Exit For」

演算子 終了 サイクルを中断するために使用されます。 コード内でこのステートメントが検出されるとすぐに、プログラムはループの実行を終了し、このループの直後のコード内にあるステートメントの実行に進みます。 これは、たとえば、配列内の特定の値を検索するために使用できます。 これを行うには、ループを使用して、配列の各要素をスキャンします。 必要な要素が見つかるとすぐに、残りを調べる必要はありません。サイクルは中断されます。

オペレーター申請 終了 次の例で説明します。 ここで、ループは 100 個の配列エントリを反復し、それぞれを変数の値と比較します dVal…一致が見つかった場合、ループは終了します。

For i = 1 to 100 If dValues(i) = dVal Then IndexVal = i Exit For End If Next i

Visual Basic の Do While ループ

サイクル 一方を行います 指定された条件が満たされている限り、コード ブロックを実行します。 以下は手順の一例です サブ、ループを使用する 一方を行います 1000 を超えないフィボナッチ数が順番に表示されます。

'Sub プロシージャは、1000 を超えないフィボナッチ数を出力します Sub Fibonacci() Dim i As Integer '配列内の要素の位置を示すカウンター Dim iFib As Integer '配列の現在の値を格納します Dim iFib_Next As Integer '次の値を格納しますDim iStep As Integer '次のインクリメントのサイズを格納 '変数 i および iFib_Next を初期化 i = 1 iFib_Next = 0 '現在のフィボナッチ数の値が 1000 を超えるまで Do While ループを実行 Do While iFib_Next < 1000 If i = 1 Then '最初の要素の特殊なケース iStep = 1 iFib = 0 Else 'シーケンスの現在の値を上書きする前に、次のインクリメントのサイズを保存します iStep = iFib iFib = iFib_Next End If '列 A の現在のフィボナッチ数を出力します'インデックス i の行のアクティブなワークシート Cells(i , 1).Value = iFib '次のフィボナッチ数を計算し、要素位置のインデックスを 1 増やします iFib_Next = iFib + iStep i = i + 1 Loop End Sub

与えられた例では、条件 iFib_Next < 1000 ループの開始時にチェックされます。 したがって、最初の値 iFib_Next 1000 を超える場合、ループは実行されません。

ループを実装する別の方法 一方を行います - 条件をループの最初ではなく、最後に配置します。 この場合、条件が満たされるかどうかに関係なく、ループは少なくとも XNUMX 回実行されます。

概略的には、このようなサイクル 一方を行います 最後にチェックする条件は次のようになります。

Do ... iFib_Next < 1000 の間ループする

Цикл «Do until» в Visual Basic

サイクル まで行う サイクルによく似ている 一方を行います: ループ本体のコード ブロックは、指定された条件が満たされるまで何度も実行されます (条件式の結果は )。 次の手順で サブ サイクルを使って まで行う 列内のすべてのセルから値を取得する A 列が空のセルに遭遇するまでワークシート:

iRow = 1 Do until IsEmpty(Cells(iRow, 1)) '現在のセルの値が配列に格納されます dCellValues dCellValues(iRow) = Cells(iRow, 1).Value iRow = iRow + 1 Loop

上記の例では、条件 IsEmpty(セル(iRow, 1)) 構造体の先頭に位置する まで行う、したがって、取得された最初のセルが空でない場合、ループは少なくとも XNUMX 回実行されます。

ただし、ループの例に示すように 一方を行います、場合によっては、条件式の最初の結果に関係なく、ループを少なくとも XNUMX 回実行する必要があります。 この場合、次のように条件式をループの最後に配置する必要があります。

Do ... IsEmpty(Cells(iRow, 1)) までループする

コメントを残す