Loops em VBA

Existem situações em que um programa VBA precisa executar o mesmo conjunto de ações várias vezes seguidas (ou seja, repetir o mesmo bloco de código várias vezes). Isso pode ser feito usando loops VBA.

Os loops VBA incluem:

A seguir, examinaremos mais de perto cada um desses ciclos.

Operador de loop para Visual Basic

A estrutura do operador de loop A em Visual Basic pode ser organizado em uma das duas formas: como um loop A seguir ou como um laço Para cada.

Ciclo “Para … Próximo”

Ciclo A seguir usa uma variável que sequencialmente recebe valores de um determinado intervalo. A cada alteração do valor da variável, são executadas as ações contidas no corpo do ciclo. Isso é fácil de entender a partir de um exemplo simples:

Para i = 1 a 10 Total = Total + iArray(i) Próximo i

Neste laço simples A seguir variável é usada i, que assume sequencialmente os valores 1, 2, 3, … 10, e para cada um desses valores é executado o código VBA dentro do loop. Assim, este loop soma os elementos do array. iArray em variável Total.

No exemplo acima, o incremento do loop não é especificado, portanto, para incrementar a variável i de 1 a 10, o padrão é um incremento 1… Porém, em alguns casos é necessário utilizar valores de incremento diferentes para o loop. Isso pode ser feito usando a palavra-chave Passocomo mostrado no exemplo simples a seguir.

Para d = 0 a 10 Etapa 0.1 dTotal = dTotal + d Próximo d

Como no exemplo acima, o passo de incremento é igual a 0.1, então a variável dTotal para cada repetição do ciclo assume os valores 0.0, 0.1, 0.2, 0.3,… 9.9, 10.0.

Para determinar a etapa do loop no VBA, você pode usar um valor negativo, por exemplo, assim:

Para i = 10 Para 1 Etapa -1 iArray(i) = i Próximo i

Aqui o incremento é -1, então a variável i com cada repetição do ciclo assume os valores 10, 9, 8, … 1.

Loop “Para Cada”

Ciclo Para cada semelhante a um ciclo A seguir, mas em vez de iterar sobre a sequência de valores para a variável do contador, o loop Para cada executa um conjunto de ações para cada objeto no grupo de objetos especificado. No exemplo a seguir, usando um loop Para cada enumera todas as planilhas na pasta de trabalho atual do Excel:

Dim wSheet As Worksheet For Each WSheet in Worksheets MsgBox "Найден лист: " & wSheet.Name Next wSheet

Instrução de interrupção de loop “Exit For”

operador Sair para usado para interromper o ciclo. Assim que essa instrução é encontrada no código, o programa encerra a execução do loop e prossegue para a execução das instruções que estão no código imediatamente após esse loop. Isso pode ser usado, por exemplo, para procurar um valor específico em uma matriz. Para fazer isso, usando um loop, cada elemento do array é varrido. Assim que o elemento necessário é encontrado, não há necessidade de procurar no resto – o ciclo é interrompido.

Aplicativo do operador Sair para demonstrado no exemplo a seguir. Aqui o loop itera mais de 100 entradas de array e compara cada uma com o valor da variável dVal… Se uma correspondência for encontrada, o loop será encerrado:

Para i = 1 a 100 Se dValues(i) = dVal Então IndexVal = i Exit For End If Next i

O loop Do While no Visual Basic

Ciclo Fazer enquanto executa um bloco de código desde que a condição especificada seja atendida. Segue um exemplo de procedimento Sub, em que usando o loop Fazer enquanto Os números de Fibonacci que não excedem 1000 são exibidos sequencialmente:

'Subprocedimento gera números de Fibonacci não superiores a 1000 Sub Fibonacci() Dim i As Integer 'contador para indicar a posição do elemento na sequência Dim iFib As Integer 'armazena o valor atual da sequência Dim iFib_Next As Integer 'armazena o próximo valor da sequência Dim iStep As Integer 'armazena o tamanho do próximo incremento 'inicializa as variáveis ​​i e iFib_Next i = 1 iFib_Next = 0 'Faça o loop While será executado até que o valor do 'número atual de Fibonacci seja maior que 1000 Do While iFib_Next < 1000 If i = 1 Then 'caso especial para o primeiro elemento iStep = 1 iFib = 0 Else 'salva o tamanho do próximo incremento antes de sobrescrever 'o valor atual da sequência iStep = iFib iFib = iFib_Next End If 'imprime o número atual de Fibonacci na coluna A de a planilha ativa 'na linha com o índice i Cells(i , 1).Value = iFib 'calcula o próximo número de Fibonacci e incrementa o índice de posição do elemento em 1 iFib_Next = iFib + iStep i = i + 1 Loop End Sub

No exemplo dado, a condição iFib_Próximo < 1000 verificada no início do loop. Portanto, se o primeiro valor iFib_Next Se houvesse mais de 1000, o loop nunca seria executado.

Outra maneira de implementar um loop Fazer enquanto - coloque a condição não no início, mas no final do loop. Nesse caso, o loop será executado pelo menos uma vez, independentemente de a condição ser atendida.

Esquematicamente, tal ciclo Fazer enquanto com a condição a ser verificada no final ficará assim:

Faça ... Loop Enquanto iFib_Next < 1000

Цикл «Do Until» em Visual Basic

Ciclo Fazer até muito parecido com o ciclo Fazer enquanto: o bloco de código no corpo do loop é executado repetidamente até que a condição especificada seja atendida (o resultado da expressão condicional é Verdadeiro). No próximo procedimento Sub usando um ciclo Fazer até recuperar valores de todas as células em uma coluna A planilha até que a coluna encontre uma célula vazia:

iRow = 1 Do Until IsEmpty(Cells(iRow, 1)) 'O valor da célula atual é armazenado no array dCellValues ​​​​dCellValues(iRow) = Cells(iRow, 1).Value iRow = iRow + 1 Loop

No exemplo acima, a condição IsVazio(Células(iRow, 1)) localizado no início da estrutura Fazer até, então o loop será executado pelo menos uma vez se a primeira célula tomada não estiver vazia.

No entanto, como mostrado nos exemplos de loop Fazer enquanto, em algumas situações é necessário que o laço seja executado pelo menos uma vez, independente do resultado inicial da expressão condicional. Nesse caso, a expressão condicional deve ser colocada no final do loop, assim:

Faça ... Loop até ficar vazio(Cells(iRow, 1))

Deixe um comentário