TOP
VBA-レッスン 8.2。ループ (Loops)
今学んだことを実践するために、現在アクティブなセルから開始して 10x10 のチェッカーボード (赤と黒) を描画するマクロを作成するプロセスを順を追って説明します。
取得したいループの出力を見てみましょう。
次に、演習の最初のステップとして、空のプロシージャを作成します。
- Sub loops_exercise()
-
- Const NB_CELLS As Integer = 10
-
-
-
- End Sub
Sub loops_exercise()
Const NB_CELLS As Integer = 10 'ペイントしたいセルの数
'...
End Sub
まず、FOR ループを追加して列 A を黒くします (NB_CELLS 定数は 10)。
次の結果が得られるはずです。
コードを見てみましょう:
- Sub loops_exercise()
-
- Const NB_CELLS As Integer = 10
-
- For r = 1 To NB_CELLS
-
- Cells(r, 1).Interior.Color = RGB(0, 0, 0)
-
- Next
-
- End Sub
Sub loops_exercise()
Const NB_CELLS As Integer = 10 'ペイントしたいセルの数
For r = 1 To NB_CELLS 'r => 行番号
Cells(r, 1).Interior.Color = RGB(0, 0, 0) '黒
Next
End Sub
次のステップでは、IF 命令を使用して (行番号が偶数か奇数かに基づいて)、後続の各セルを赤色に色付けします。見る低い:
このサブタスクを解決するためのコードは次のとおりです。
- Sub loops_exercise()
-
- Const NB_CELLS As Integer = 10
-
- For r = 1 To NB_CELLS
-
- If r Mod 2 = 0 Then
- Cells(r, 1).Interior.Color = RGB(200, 0, 0)
- Else
- Cells(r, 1).Interior.Color = RGB(0, 0, 0)
- End If
-
- Next
-
- End Sub
Sub loops_exercise()
Const NB_CELLS As Integer = 10 'ペイントしたいセルの数
For r = 1 To NB_CELLS 'r => 行番号
If r Mod 2 = 0 Then 'Mod => は除算の余りです
Cells(r, 1).Interior.Color = RGB(200, 0, 0) '赤
Else
Cells(r, 1).Interior.Color = RGB(0, 0, 0) '黒
End If
Next
End Sub
条件 IF r Mod 2 = 0 は、r を 2 で割った余りが 0 の場合...を意味します。
2 で割ったとき、偶数の行番号のみが 0 になります。
すでに 10 列に対して作成したループを実行する別のループを作成する方法。見る低い:
このサブタスクを解決するためのコードは次のとおりです。
- Sub loops_exercise()
-
- Const NB_CELLS As Integer = 10
-
- For r = 1 To NB_CELLS
-
- For c = 1 To NB_CELLS
-
- If r Mod 2 = 0 Then
- Cells(r, c).Interior.Color = RGB(200, 0, 0)
- Else
- Cells(r, c).Interior.Color = RGB(0, 0, 0)
- End If
-
- Next
- Next
-
- End Sub
Sub loops_exercise()
Const NB_CELLS As Integer = 10 '10x10 チェッカーボードとセル
For r = 1 To NB_CELLS 'r => 行番号
For c = 1 To NB_CELLS 'c => 列番号
If r Mod 2 = 0 Then
Cells(r, c).Interior.Color = RGB(200, 0, 0) '赤
Else
Cells(r, c).Interior.Color = RGB(0, 0, 0) '黒
End If
Next
Next
End Sub
ここで、2 番目のサイクルが最初のサイクルに挿入されます。
次の結果を達成するには...
交換:
If r Mod 2 = 0 Then
の上:
- If (r + c) Mod 2 = 0 Then
If (r + c) Mod 2 = 0 Then
あとは、選択したセル (A1 ではない) からチェッカーボードが作成されるようにコードを変更するだけです。下記参照:
このために、次のコードを書きます。
- Sub loops_exercise()
-
- Const NB_CELLS As Integer = 10
- Dim offset_row As Integer, offset_col As Integer
-
-
- offset_row = ActiveCell.Row - 1
-
- offset_col = ActiveCell.Column - 1
-
- For r = 1 To NB_CELLS
-
- For c = 1 To NB_CELLS
-
- If (r + c) Mod 2 = 0 Then
-
-
- Cells(r + offset_row, c + offset_col).Interior.Color = RGB(200, 0, 0)
- Else
- Cells(r + offset_row, c + offset_col).Interior.Color = RGB(0, 0, 0)
- End If
-
- Next
- Next
-
- End Sub
Sub loops_exercise()
Const NB_CELLS As Integer = 10 '10x10 チェッカーボードとセル
Dim offset_row As Integer, offset_col As Integer '=> 2 つの変数を追加します
'最初のセルから始まるオフセット (行) = 現在のアクティブ セルの行番号 - 1
offset_row = ActiveCell.Row - 1
'最初のセルから始まるオフセット (列) = 現在のアクティブ セルの列番号 - 1
offset_col = ActiveCell.Column - 1
For r = 1 To NB_CELLS '行番号
For c = 1 To NB_CELLS '列番号
If (r + c) Mod 2 = 0 Then
'Cell(行番号 + 追加の行オフセット、列番号 +
'柱の追加の変位)
Cells(r + offset_row, c + offset_col).Interior.Color = RGB(200, 0, 0) '赤
Else
Cells(r + offset_row, c + offset_col).Interior.Color = RGB(0, 0, 0) '黒
End If
Next
Next
End Sub