次の方法で共有


セル範囲の各セルをループで操作する

Visual Basic では、セル範囲の各セルに対して同じステートメント ブロックを実行することがよくあります。 この場合、各セルを指定するためのメソッドとループ構造を組み合わせて処理します。

最初の方法は Cells プロパティと For...Next ループを組み合わせて操作します。 Cells プロパティを使うと、ループのカウンター変数 (またはその他の変数や式) をセルのインデックス番号として使うことができます。 次の使用例は、 counter という変数を行番号として使っています。 このプロシージャは、セル範囲 C1:C20 を対象にしてループを行い、セルの値の絶対値が 0.01 より小さい場合は値を 0 (ゼロ) に設定します。

Sub RoundToZero1() 
 For Counter = 1 To 20 
 Set curCell = Worksheets("Sheet1").Cells(Counter, 3) 
 If Abs(curCell.Value) < 0.01 Then curCell.Value = 0 
 Next Counter 
End Sub

セル範囲の各セルをループで操作するのに簡単なもう 1 つの方法は、For Each...Next ループを Range プロパティで指定されたセルのコレクションと組み合わせて使用することです。 Visual Basic automatically sets an object variable for the next cell each time the loop runs. The following procedure loops through the range A1:D10, setting to 0 (zero) any number whose absolute value is less than 0.01.

Sub RoundToZero2() 
 For Each c In Worksheets("Sheet1").Range("A1:D10").Cells 
 If Abs(c.Value) < 0.01 Then c.Value = 0 
 Next 
End Sub

ループの対象とするセル範囲の境界が明確でない場合は、CurrentRegion プロパティを使うと、アクティブ セルの周囲の領域を取得することができます。 たとえば、次の使用例をワークシートで実行すると、アクティブ セルの周囲の領域を対象にしてループを行い、セルの値の絶対値が 0.01 より小さい場合は値を 0 (ゼロ) に設定します。

Sub RoundToZero3() 
 For Each c In ActiveCell.CurrentRegion.Cells 
 If Abs(c.Value) < 0.01 Then c.Value = 0 
 Next 
End Sub

サポートとフィードバック

Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。