Loop através de um intervalo de células

Ao usar o Visual Basic, você freqüentemente precisa executar o mesmo bloco de instruções em cada célula de um intervalo de células. Para fazer isso, você combina uma instrução de loop com um ou mais métodos para identificar cada célula, uma de cada vez, e executa a operação.

Uma maneira de fazer loop através de um intervalo é usar o loop For...Next com a propriedade Cells. Usando a propriedade Cells, você pode substituir o contador do loop (ou outras variáveis ou expressões) pelos números de índice das células. No exemplo seguinte, a variável counter é substituída pelo índice de linha. O procedimento faz um loop através de um intervalo C1:C20, definindo como 0 (zero) qualquer número cujo valor absoluto seja menor que 0,01.

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

Uma outra maneira mais fácil de se fazer um loop através de um intervalo é usar um loop For Each...Next com a coleção de células retornada pela propriedade Range. O Visual Basic define automaticamente uma variável de objeto para a próxima célula cada vez que o loop é executado. O procedimento seguinte faz um loop através do intervalo A1:D10, definindo como 0 (zero) qualquer número cujo valor absoluto seja menor que 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

Se você não souber os limites do intervalo pelo qual deseja fazer o loop, você pode usar a propriedade CurrentRegion para retornar o intervalo que envolve a célula ativa. Por exemplo, o procedimento seguinte, quando executado de uma planilha, faz um loop através do intervalo que envolve a célula ativa, definindo como 0 (zero) qualquer número cujo valor absoluto seja menor que 0,01.

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