TOP

VBA-レッスン 8.2。ループ (Loops)

今学んだことを実践するために、現在アクティブなセルから開始して 10x10 のチェッカーボード (赤と黒) を描画するマクロを作成するプロセスを順を追って説明します。


取得したいループの出力を見てみましょう。

次に、演習の最初のステップとして、空のプロシージャを作成します。

  1. Sub loops_exercise()  
  2.   
  3.     Const NB_CELLS As Integer = 10 'ペイントしたいセルの数  
  4.   
  5.     '...  
  6.      
  7. End Sub  

まず、FOR ループを追加して列 A を黒くします (NB_CELLS 定数は 10)。

次の結果が得られるはずです。

コードを見てみましょう:

  1. Sub loops_exercise()  
  2.   
  3.     Const NB_CELLS As Integer = 10 'ペイントしたいセルの数  
  4.   
  5.     For r = 1 To NB_CELLS 'r => 行番号  
  6.      
  7.         Cells(r, 1).Interior.Color = RGB(0, 0, 0) '黒  
  8.   
  9.     Next  
  10.      
  11. End Sub  

次のステップでは、IF 命令を使用して (行番号が偶数か奇数かに基づいて)、後続の各セルを赤色に色付けします。見る低い:

このサブタスクを解決するためのコードは次のとおりです。

  1. Sub loops_exercise()  
  2.   
  3.     Const NB_CELLS As Integer = 10 'ペイントしたいセルの数  
  4.   
  5.     For r = 1 To NB_CELLS 'r => 行番号  
  6.      
  7.        If r Mod 2 = 0 Then 'Mod => は除算の余りです  
  8.            Cells(r, 1).Interior.Color = RGB(200, 0, 0) '赤  
  9.        Else  
  10.            Cells(r, 1).Interior.Color = RGB(0, 0, 0) '黒  
  11.        End If  
  12.   
  13.     Next  
  14.      
  15. End Sub  

条件 IF r Mod 2 = 0 は、r を 2 で割った余りが 0 の場合...を意味します。

2 で割ったとき、偶数の行番号のみが 0 になります。

すでに 10 列に対して作成したループを実行する別のループを作成する方法。見る低い:

このサブタスクを解決するためのコードは次のとおりです。

  1. Sub loops_exercise()  
  2.   
  3.     Const NB_CELLS As Integer = 10 '10x10 チェッカーボードとセル  
  4.   
  5.     For r = 1 To NB_CELLS 'r => 行番号  
  6.      
  7.         For c = 1 To NB_CELLS 'c => 列番号  
  8.          
  9.            If r Mod 2 = 0 Then  
  10.                Cells(r, c).Interior.Color = RGB(200, 0, 0) '赤  
  11.            Else  
  12.                Cells(r, c).Interior.Color = RGB(0, 0, 0) '黒  
  13.            End If  
  14.              
  15.         Next  
  16.     Next  
  17.      
  18. End Sub  

ここで、2 番目のサイクルが最初のサイクルに挿入されます。

次の結果を達成するには...

交換:

  1. If r Mod 2 = 0 Then  

の上:

  1. If (r + c) Mod 2 = 0 Then  

あとは、選択したセル (A1 ではない) からチェッカーボードが作成されるようにコードを変更するだけです。下記参照:

このために、次のコードを書きます。

  1. Sub loops_exercise()  
  2.   
  3.    Const NB_CELLS As Integer = 10 '10x10 チェッカーボードとセル  
  4.    Dim offset_row As Integer, offset_col As Integer '=> 2 つの変数を追加します  
  5.      
  6.    '最初のセルから始まるオフセット (行) = 現在のアクティブ セルの行番号 - 1  
  7.    offset_row = ActiveCell.Row - 1  
  8.    '最初のセルから始まるオフセット (列) = 現在のアクティブ セルの列番号 - 1  
  9.    offset_col = ActiveCell.Column - 1  
  10.      
  11.    For r = 1 To NB_CELLS '行番号  
  12.      
  13.         For c = 1 To NB_CELLS '列番号  
  14.          
  15.             If (r + c) Mod 2 = 0 Then  
  16.             'Cell(行番号 + 追加の行オフセット、列番号 +  
  17.             '柱の追加の変位)  
  18.                 Cells(r + offset_row, c + offset_col).Interior.Color = RGB(200, 0, 0) '赤  
  19.             Else  
  20.                 Cells(r + offset_row, c + offset_col).Interior.Color = RGB(0, 0, 0) '黒  
  21.             End If  
  22.              
  23.         Next  
  24.    Next  
  25.      
  26. End Sub