Índice:
- Um exemplo para próximo exemplo
- Exemplos de Próxima-Próxima com uma Etapa
- Um exemplo para Next com uma declaração Exit For
- Um exemplo de Próxima Próxima
Vídeo: #25 - Curso de Macros e Excel VBA - Tratamento de Erros (On Error) 2025
O tipo mais simples de loop na programação do Excel VBA é um loop For-Next. O looping é controlado por uma variável de contador, que começa com um valor e pára em outro valor. As declarações entre a instrução For e a instrução Next são as declarações que são repetidas no loop.
Um exemplo para próximo exemplo
O exemplo a seguir usa um loop For-Next para somar os primeiros 1 000 números positivos. A variável Total começa como zero. Em seguida, ocorre o loop. A variável Cnt é o contador de contornos. Ele começa como 1 e é incrementado em 1 cada vez através do loop. O loop termina quando Cnt é 1 000.
Este exemplo tem apenas uma instrução dentro do loop. Esta declaração adiciona o valor de Cnt à variável Total. Quando o loop terminar, um MsgBox exibe a soma dos números.
Sub AddNumbers () Dim Total como Double Dim Cnt As Long Total = 0 Para Cnt = 1 a 1000 Total = Total + Cnt Próximo Cnt MsgBox Total End Sub
Como o contador de loop é uma variável normal, você pode escrever codifique para alterar seu valor dentro do bloco de código entre as instruções For e Next. Isso, no entanto, é uma prática muito ruim .
Exemplos de Próxima-Próxima com uma Etapa
Você pode usar um valor de Etapa para ignorar alguns valores do contador em um loop For-Next. Aqui está o exemplo anterior, reescrito para somar apenas os números ímpares entre 1 e 1 000:
Sub AddOddNumbers () Dim Total como Double Dim Cnt As Longo Total = 0 Para Cnt = 1 a 1000 Passo 2 Total = Total + Cnt Próximo Cnt MsgBox Total End Sub
Desta vez, Cnt começa como 1 e assume valores de 3, 5, 7 e assim por diante. O valor Step determina como o contador é incrementado. Observe que o valor do loop superior (1000) não é realmente usado porque o valor mais alto de Cnt será 999.
Aqui está outro exemplo que usa um valor Step de 3. Este procedimento funciona com a folha ativa e aplica sombreamento cinza claro a cada terceira linha, da linha 1 à linha 100.
Sub ShadeEveryThirdRow () Dim i As Long For i = 1 a 100 Passo 3 Linhas (i). Interior. Cor = RGB (200, 200, 200) Próximo i End Sub
Verifique o resultado da execução desta macro.
Um exemplo para Next com uma declaração Exit For
Um loop For-Next também pode incluir uma ou mais instruções Exit For no loop. Quando o VBA encontra essa afirmação, o loop termina imediatamente.
O exemplo a seguir demonstra a declaração Exit For. Esta rotina é um procedimento de Função, destinado a ser usado em uma fórmula de planilha.A função aceita um argumento (uma variável chamada Str) e retorna os caracteres à esquerda do primeiro dígito numérico. Por exemplo, se o argumento for "KBR98Z", a função retornará "KBR". "
Função TextPart (Str) Dim i Como Long TextPart =" "Para i = 1 Para Len (Str) Se IsNumeric (Mid (Str, i, 1)) Então Sair Para Else TextPart = TextPart & Mid (Str, i, 1) End If Next i End Function
O loop For-Next começa com 1 e termina com o número que representa o número de caracteres na string. O código usa a função Mid da VBA para extrair um único caractere dentro do loop. Se um caractere numérico for encontrado, a instrução Exit For é executada e o loop termina prematuramente.
Se o caractere não é numérico, ele é anexado ao valor retornado (que é o mesmo que o nome da função). A única vez que o loop irá examinar cada personagem é se a seqüência de caracteres como o argumento não contém caracteres numéricos.
Um exemplo de Próxima Próxima
Você pode ter qualquer número de instruções no loop e aninhar Loops For-Next dentro de outros loops For-Next.
O exemplo a seguir usa um loop For-Next aninhado para inserir números aleatórios em uma faixa de células de 12 linhas por 5 colunas. Observe que a rotina executa o loop interno (o loop com o contador de linhas) uma vez para cada iteração do loop externo (o loop com o contador Col). Em outras palavras, a rotina executa a indicação Cells (Row, Col) = Rnd 60 vezes.
Sub FillRange () Dim Col como a linha Dim Dim Long Long para Col = 1 a 5 para Row = 1 a 12 células (Row, Col) = Rnd Next Row Next Col End Sub
O próximo exemplo usa aninhado For - Loops seguintes para inicializar uma matriz tridimensional com o valor 100. Esta rotina executa a declaração no meio de todos os loops (a declaração de atribuição) 1, 000 vezes (10 * 10 * 10), cada vez com uma combinação diferente de valores para i, j e k:
Sub NestedLoops () Dim MyArray (10, 10, 10) Dim i As Long Dim j Como Long Dim k Como Long Para i = 1 To 10 Para j = 1 To 10 Para k = 1 a 10 MyArray (i, j, k) = 100 Próximo k Próximo j Próximo i 'Outras instruções vão aqui End Sub
Aqui está um exemplo final que usa loops Aninhados para Próximo, com um valor Step. Este procedimento cria um tabuleiro de damas alterando a cor de fundo das células alternadas.
O contador de linhas faz um loop de 1 a 8. Uma construção If-Then determina qual estrutura de For-Next aninhada usar. Para as linhas de números ímpares, o contador Col começa com 2. Para as fileiras em número par, o contador Col começa com 1. Ambos os loops usam um valor de Etapa de 2, portanto, as células alternativas são afetadas. Duas declarações adicionais tornam as células quadradas (como um xadrez real).
Sub MakeCheckerboard () Dim R As Long, C Longo para R = 1 a 8 Se WorksheetFunction. IsOdd (R) Então Para C = 2 a 8 Passo 2 Células (R, C). Interior. Cor = 255 Próximo C Else Para C = 1 a 8 Passo 2 Células (R, C). Interior. Cor = 255 Próximo C End If Next R Rows ("1: 8").RowHeight = 35 Colunas ("A: H"). ColumnWidth = 6. 5 End Sub
