目次:
- A For-Nextの例
- Sub AddOddNumbers()Double Dim Cnt As Long合計= 0 Cnt = 1の場合1000 Step 2 Total = Total + Cnt次のCnt MsgBoxの合計End Sub
- 次の例は、Exit Forステートメントを示しています。このルーチンは、ワークシート式で使用するための関数プロシージャです。関数は1つの引数(Strという名前の変数)を受け取り、その文字を最初の数字の左側に返します。たとえば、引数が "KBR98Z"の場合、関数は "KBR"を返します。 "
- 次の例では、ネストされたFor-Nextループを使用して、12行5列の範囲のセルに乱数を挿入します。ルーチンは、
ビデオ: 【Excel】VBA For ~Next構文を説明 2024
Excel VBAプログラミングで最も単純なループのタイプは、For-Nextループです。ルーピングはカウンタ変数によって制御されます。カウンタ変数はある値から始まり、別の値で停止します。 ForステートメントとNextステートメントの間のステートメントは、ループ内で繰り返されるステートメントです。
A For-Nextの例
次の例ではFor-Nextループを使用して、最初の1,000個の正の数を合計します。 Total変数はゼロとして始まります。その後、ループが発生します。変数Cntはループカウンタです。それは1から始まり、ループのたびに1ずつインクリメントされます。ループはCntが1,000のときに終了します。
<! - 1 - >この例では、ループ内に1つの文しかありません。このステートメントは、Cntの値をTotal変数に追加します。ループが終了すると、MsgBoxは数値の合計を表示します。
Sub AddNumbers()Double Dim Cnt As Long合計= 0 Cnt = 1の場合1000 Total =合計+ Cnt次Cnt MsgBox合計End Sub
ループカウンタは通常の変数なので、 ForとNextステートメント間のコードブロック内の値を変更するコード。しかし、これは非常に悪い999の習慣です。 <! - 2 - > ステップ -
を使用した次の例ステップ値を使用して、For-Nextループ内のいくつかのカウンタ値をスキップできます。ここでは、1と1の間の奇数のみを合計するように書き直された前の例があります:Sub AddOddNumbers()Double Dim Cnt As Long合計= 0 Cnt = 1の場合1000 Step 2 Total = Total + Cnt次のCnt MsgBoxの合計End Sub
今回は、Cntは1から始まり、3,5,7などの値をとります。ステップ値は、カウンターのインクリメント方法を決定します。 Cntの最高値が999になるため、上部ループ値(1000)は実際には使用されないことに注意してください。
<! - 3 - >
ステップ値3を使用する別の例を次に示します。このプロシージャはアクティブシートで動作し、1行目から100行目までの3行おきに薄い灰色のシェーディングを適用します。
Sub ShadeEveryThirdRow )Dim i i = 1〜100までステップ3行(i)。インテリア。 Color = RGB(200,200,200)Next i End Subこのマクロを実行した結果を確認します。
ループを使用して背景シェーディングを行に適用します。
For For Exit文を含むFor-Nextの例
For-Nextループには、ループ内に1つ以上のExit For文を含めることもできます。 VBAがこのステートメントを検出すると、ループは直ちに終了します。次の例は、Exit Forステートメントを示しています。このルーチンは、ワークシート式で使用するための関数プロシージャです。関数は1つの引数(Strという名前の変数)を受け取り、その文字を最初の数字の左側に返します。たとえば、引数が "KBR98Z"の場合、関数は "KBR"を返します。 "
関数TextPart(Str)IsNumeric(Mid(Str、i、1))の場合は、i = 1の場合はi = 1、TextPart = TextPartの場合はTextPart = i、1)End if Next i End Function
For-Nextループは1で始まり、文字列内の文字数を表す数字で終了します。このコードでは、VBAのMid関数を使用してループ内の1文字を抽出します。数字の文字が見つかると、Exit Forステートメントが実行され、ループは途中で終了します。
文字が数値でない場合は、戻り値(関数の名前と同じ)に追加されます。ループがすべての文字を調べる唯一の時間は、引数として渡された文字列に数字が含まれていない場合です。
ネストされたFor-Nextの例
ループ内に任意の数のステートメントを配置し、For-Nextループ内のFor-Nextループをネストすることができます。
次の例では、ネストされたFor-Nextループを使用して、12行5列の範囲のセルに乱数を挿入します。ルーチンは、
外部ループ
(Colカウンタを持つループ)の反復ごとに 内部ループ (行カウンタを持つループ)を1回実行します。つまり、ルーチンはCells(Row、Col)= Rndステートメントを60回実行します。これらの細胞は、ネストされたFor-Nextループを用いて充填された。 Sub FillRange()Dim Colを長いDim行としてCol = 1から5までRow = 1から12までCell(Row、Col)= Rnd次の行Next Col End Sub 次の例では、このルーチンは、すべてのループの途中でステートメントを実行します(代入ステートメント)。1000回(10 * 10 * 10)、毎回異なる組み合わせでステートメントを実行します(10、10、10)Dim My As Long Dim j j Long Dim k as Long i = 1〜10の場合j = 1〜10の場合k = 1〜10 MyArray(i、j、k)= 100次のk次のj次のi 'その他のステートメントはここにありますEnd Sub
ステップ値でネストされたFor-Nextループを使用する最後の例です。この手順では、交互のセルの背景色を変更してチェッカーボードを作成します。ループを使用してチェッカーボードパターンを作成する。
行カウンタは1から8までループします。If-Then構文は、使用するネストされたFor-Next構造を決定します。奇数行の場合、Colカウンタは2で始まります。偶数行の場合、Colカウンタは1で始まります。両方のループでステップ値2を使用するため、代替セルが影響を受けます。 2つの追加のステートメントは、セルを正方形にします(実際のチェッカーボードのように)。
Sub MakeCheckerboard()Dim Rを長く、Cを長くするR = 1〜8 WorksheetFunctionの場合。 IsOdd(R)Then C = 2〜8 Step 2セル(R、C)。インテリア。色= 255次へC = 1〜8ステップ2セル(R、C)。インテリア。 Color = 255 Next C次の行が終了するR行( "1:8")。RowHeight = 35列( "A:H")。 ColumnWidth = 6. 5 End Sub