VBA para Loop, Usando Loops em VBA no Microsoft Excel

Anonim

Neste artigo, cobrimos diferentes tipos de loops usados ​​no VBA e como usá-los para realizar a mesma tarefa de maneiras diferentes.

Por que loops?

Loop é uma das técnicas de programação mais poderosas usadas em muitas linguagens de programação. O loop é usado para repetir um bloco de código pelo número necessário de vezes ou até que uma determinada condição seja avaliada como verdadeira ou um valor específico seja alcançado, após o qual o próximo bloco de código é executado.

O objetivo de um loop VBA do Excel é fazer com que o Excel repita um trecho de código certo número de vezes. Pode-se especificar quantas vezes um código deve ser repetido como um número fixo (por exemplo, faça isso 10 vezes), ou como uma variável (por exemplo, faça isso tantas vezes quanto houver linhas de dados).

Os Loops do Excel podem ser construídos de diferentes maneiras para se adequar a diferentes circunstâncias. Freqüentemente, os mesmos resultados podem ser obtidos de maneiras diferentes para atender às suas preferências pessoais.

Existem três tipos diferentes de loops disponíveis no Excel VBA, que são:

1. Faça o loop até

2. Loop DO WHILE

3. Loop FOR

1. Faça o loop até

O DO UNTIL Loop é usado para repetir um bloco de código indefinidamente, até que a condição especificada seja definida como True. A condição pode ser verificada no início ou no final do Loop. A instrução DO UNTIL… LOOP testa a condição no início, enquanto a instrução DO… LOOP UNTIL testa a condição no final do Loop.

Sintaxe da instrução DO UNTIL … LOOP

Faça até [condição]

[Bloco de código a ser repetido]

Ciclo

Sintaxe da instrução DO … LOOP UNTIL

Fazer

[Bloco de código a ser repetido]

Loop até [condição]

Explicamos o loop DO … UNTIL com um exemplo. As macros Loop1 e Loop2 são usadas para calcular a média dos números na coluna A e na coluna B usando o loop DO… UNTIL.

Os dados da amostra estão presentes no intervalo A15: B27. A coluna A contém as pontuações da Rodada 1 e a coluna B contém as pontuações da Rodada 2. Queremos calcular as médias das pontuações da Rodada 1 e da Rodada 2 na coluna C.

Na macro Loop1, usamos “FormulaR1C1” para inserir a fórmula média na célula ativa. A instrução de condição no loop DO UNTIL é verificada no final do loop.

Na macro Loop2, usamos “WorksheetFunction.Aadise” para inserir o valor médio na célula ativa. Mesmo nessa macro, a declaração da condição é verificada no final do loop.

A única diferença entre a macro Loop1 e Loop2 é que Loop1 insere a fórmula média, enquanto Loop2 calcula a média e, em seguida, insere o valor médio na célula ativa.

2. Loop DO WHILE

O loop DO WHILE é usado para repetir um bloco de código indefinido por um número de vezes, enquanto a condição especificada continua a ser True e para quando a condição retorna False. A condição pode ser verificada no início ou no final do Loop. A instrução DO WHILE… LOOP testa a condição no início, enquanto a instrução DO… LOOP WHILE testa a condição no final do loop. A instrução DO… LOOP WHILE é usada quando queremos que o loop execute o bloco de código pelo menos uma vez antes de verificar a condição.

Sintaxe da instrução DO WHILE … LOOP

Faça enquanto [condição]

[Bloco de código a ser repetido]

Ciclo

Sintaxe da instrução DO … LOOP WHILE

Fazer

[Bloco de código a ser repetido]

Loop While [Condition]

Neste exemplo, as macros Loop3 e Loop4 são usadas para calcular médias para valores nas células da coluna A e coluna B. Ambas as macros funcionam nos mesmos dados de amostra usados ​​pelas macros Loop1 e Loop2. Ambos usam a instrução DO WHILE para percorrer o intervalo que contém os dados.

A única diferença entre as macros Loop3 e Loop4 é que elas são maneiras diferentes de representar as condições do loop DO WHILE.

Como as macros Loop3 e Loop4 usam os mesmos dados de entrada e até executam as mesmas funções da macro Loop1, a saída retornada também será a mesma da macro Loop1.

3. Loop FOR

O For Loop é usado para repetir um bloco de código por um número específico de vezes.

Sintaxe do loop FOR

Para count_variable = start_value para end_value

[bloco de código]

Next count_variable

A macro Loop5 mostra como usar o loop FOR para calcular a média. Ele também usa os mesmos dados de amostra usados ​​por outras macros. Usamos 15 como valor inicial, pois os dados de amostra começam a partir de 15º fileira. Usamos Range ("A" & Cells.Rows.Count) .End (xlUp) .Row para encontrar a última linha contendo dados. O loop FOR se repetirá (última célula-15) várias vezes.

A saída retornada após a execução da macro Loop5 é a mesma da macro Loop1.

A macro Loop6 é criada para calcular a média, somente se a célula ativa que terá a função média estiver vazia antes de executar a macro.

Os dados de amostra para esta macro estão presentes no intervalo E15 a G27.

Usamos DO… LOOP WHILE para percorrer o intervalo definido. A instrução IF é usada para verificar se a célula onde a função será inserida contém um valor. Esta macro irá inserir a função média na célula apenas se ela estiver vazia.

A macro Loop7 também é usada para calcular a média. Ele verifica os valores na coluna auxiliar antes de avaliar se deve repetir o loop. Ele também verifica se a referência de célula a ser usada na função de média está vazia.

Os dados de amostra usados ​​para a macro Loop7 estão no intervalo J15: M27.

A coluna M é usada como coluna auxiliar. Esta macro irá inserir uma função média apenas se uma célula na coluna M não estiver vazia. Esta macro verifica se uma célula deve estar vazia antes de inserir uma função média nela. Não irá inserir uma função de média se a célula referenciada na função de média estiver vazia.

Siga abaixo para o código

 Opção Explicit Sub Loop1 () 'Calculando a média' O loop Do until fará um loop até que a célula na coluna anterior da célula ativa esteja vazia Intervalo ("C15"). Selecione Do 'Atribuindo função média ao valor nas células das duas colunas consecutivas anteriores ActiveCell. FormulaR1C1 = "= Média (RC [-1], RC [-2])" 'Movendo para a célula na próxima linha ActiveCell.Offset (1, 0) .Selecione' Verificar se o valor na célula da coluna anterior está vazio 'Fazer Até o loop irá repetir até que a instrução de condição retorne True Loop até IsEmpty (ActiveCell.Offset (0, -1)) Range ("A15"). Selecione End Sub Sub Loop2 () 'Calculando a média' O loop Do until fará um loop até a célula anterior coluna da célula ativa está vazia 'Esta macro é semelhante à macro Loop1, a única forma de calcular a média é diferente do intervalo ("C15"). Selecione Fazer' Folha de cálculo. A função média é usada para calcular a média ActiveCell.Value = WorksheetFunction.Aadise ( ActiveCell.Offset (0, -1) .Value, _ ActiveCell.Offset (0, -2) .Value) ActiveCell.Offset (1, 0) .Selecione Loop até IsEmpty (ActiveCel 1. Deslocamento (0, -1)) Intervalo ("A15"). Selecione End Sub Sub Loop3 () 'Calculando a média' O loop Do While será executado até que a célula na coluna anterior da célula ativa esteja vazia Intervalo ("C15") .Selecione 'Verificando se o valor na célula da coluna anterior está vazio' O loop do While fará um loop até que a instrução da condição seja True Do While IsEmpty (ActiveCell.Offset (0, -1)) = False 'Atribuição da função média ao valor nas células anteriores duas colunas consecutivas ActiveCell.FormulaR1C1 = "= Média (RC [-1], RC [-2])" 'Movendo para a célula na próxima linha ActiveCell.Offset (1, 0) .Selecione Faixa de Loop ("A15"). Selecione End Sub Sub Loop4 () 'Calculando a média' O loop Do While será executado até que a célula na coluna anterior da célula ativa esteja vazia 'Esta macro é semelhante à macro Loop3, a única forma de aplicar a condição é um intervalo diferente ("C15"). Selecione Do While Not IsEmpty (ActiveCell.Offset (0, -1)) ActiveCell.FormulaR1C1 = "= Média (RC [-1], RC [-2])" ActiveCell.Offset (1, 0) .Selecione intervalo de loop (" A15 "). Selecione End Sub Sub Loop5 () 'Repetições de loop FOR para um número fixo número de vezes determinado pelo número de linhas Dim i, lastcell As Long 'Encontrando a última linha contendo dados na coluna A lastcell = Range ("A" & Cells.Rows.Count) .End (xlUp) .Row Range ("C15 ") .Selecione 'i variável é atribuída com valor de 15 quando nossos dados de amostra começam a partir da 15ª linha' Loop FOR fará um loop x For i = 15 Para a última célula ActiveCell.FormulaR1C1 =" = Média (RC [-1], RC [-2 } Não calcula uma média se já houver algo no intervalo da célula ("G15"). Selecione Do If IsEmpty (ActiveCell) Then ActiveCell.FormulaR1C1 = "= Average (RC [-1], RC [-2])" End If ActiveCell.Offset (1, 0) .Select Loop Até IsEmpty (ActiveCell.Offset (0, -1)) Range ("E15"). Selecione End Sub Sub Loop7 () 'Do Até que o loop seja executado enquanto houver algo na célula na próxima coluna 'Não calcula uma média se já houver algo no c ativo ell 'Nem se não houver dados nas células que são usados ​​na função média (para evitar erros # DIV / 0). 'Calculando o intervalo médio ("L15"). Selecione Do If IsEmpty (ActiveCell) Then If IsEmpty (ActiveCell.Offset (0, -1)) And IsEmpty (ActiveCell.Offset (0, -2)) Then ActiveCell.Value = " "Else ActiveCell.FormulaR1C1 =" = Média (RC [-1], RC [-2]) "End If End If ActiveCell.Offset (1, 0) .Selecione Loop Até IsEmpty (ActiveCell.Offset (0, 1)) Intervalo ("J15"). Selecione End Sub 

Se você gostou deste blog, compartilhe com seus amigos no Facebook. Além disso, você pode nos seguir no Twitter e no Facebook.

Gostaríamos muito de ouvir de você, diga-nos como podemos melhorar nosso trabalho e torná-lo melhor para você. Escreva para nós no site de e-mail