EXCEL VBA DO LOOP UNTIL - LAÇO de REPETIÇÃO + ANÁLISE com IF

Поделиться
HTML-код
  • Опубликовано: 5 сен 2024
  • Passo a passo para utilizar Do Loop Until no vba para percorrer células da planilha Excel e fazer análise dos dados. Neste exemplo trabalhamos com laço de repetição e análise através de condições if dentro do Loop Until do vba. Além de abordar o código vba Exit do utilizado para sair do loop sem que tenha chegado ao final da área de análise de dados na Planilha Excel. Com o uso da estrutura Do Until no vba, é possível definir um loop que repete um conjunto de ações até que uma condição seja atendida.
    ✅Site SGP: Venda de Coleção de Planilhas Excel VBA Prontas:
    www.planilhasc...
    ==========================================

Комментарии • 55

  • @coroinhajb2957
    @coroinhajb2957 2 года назад +1

    obrigado por ajudar compartilhando seu conhecimento.

  • @ricardofilho9830
    @ricardofilho9830 5 месяцев назад +1

    Parabéns Professor, ótimo video. Eu estou com uma situação parecida, mas eu preciso colar varias vezes o mesmo resultado em loop, usando como referencia a coluna 2

    • @CanalSGP
      @CanalSGP  5 месяцев назад +1

      Bom dia, obrigado, acredito que a estrutura de análise vai ser semelhante.

    • @ricardofilho9830
      @ricardofilho9830 5 месяцев назад

      @@CanalSGP
      With Planilha9
      Do

      Linha = Linha + 1

      Loop Until .Cells(Linha, 11).Value = ""

      .Cells(Linha, 11).Select

      Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
      :=False, Transpose:=False
      Aqui eu não estou conseguindo fazer com que ela use a coluna 2 como referencia e cole o mesmo resultado em loop até o final da planilha na coluna 11.
      Do jeito que está, ela está somente identificando a ultima linha vazia na coluna 11 e colando uma vez só.

    • @CanalSGP
      @CanalSGP  5 месяцев назад

      Boa tarde, se deseja a coluna 2 altere onde tem 11 para 2

  • @cicerolobo7583
    @cicerolobo7583 7 месяцев назад +1

    Excelente...

  • @wascarsilveira1
    @wascarsilveira1 Месяц назад

    Como faço para o vba buscar uma coluna linha em especifico na planilha através de um clique em um botão e depois ficar nessa mesma coluna acessando as células das linhas inferiores também somente através de um clique no botão, mas sem retornar para a primeira célula do primeiro clique, consegue me ajudar nessa? tem como passei o dia tentando, mas sem sucesso, parabéns pelo conteúdo você é fera.

    • @CanalSGP
      @CanalSGP  Месяц назад +1

      Bom dia, infelizmente não fiz código com funções semelhantes até o momento.

  • @olegariomoliveira
    @olegariomoliveira 3 месяца назад

    Boa noite!
    Muito bom.
    Existe algum lugar com o código fonte?

    • @CanalSGP
      @CanalSGP  3 месяца назад

      Boa tarde, pode solicitar a planilha de exemplo no e-mail do site do canal, link na descrição do vídeo.

  • @victorhugo3718
    @victorhugo3718 2 года назад

    Muito bom! Estou com uma necessidade de numerar itens, se eu tiver 3 bola azul, numerada de 1 a 3 e comprar 10 bolas, 5 azuis e 5 brancas, q o laço enumere bola azul 4,5,6,7 e 8.
    Tenho muita dificuldade com vba, pois não entendo mas acho q consigo remanejar essa forma pra resolver esse problema.
    Se não der certo, preencho no excel e copio e colo.

    • @CanalSGP
      @CanalSGP  2 года назад

      Bom dia, obrigado, não tentei fazer algo assim ainda.

  • @OriGammer
    @OriGammer 5 месяцев назад

    Professor, no caso se eu tivesse que executar essa macro em diversas guias, existe alguma forma de nao ter que repetir diversas vezes o mesmo código? No caso da parte onde referencia a guia: With Planilha1. Se eu tivesse 20 planilhas teria que fazer With Planilha1, With Planilha2, With Planilha3... sendo que é o mesmo código dentro. Tem como fazer com varíavel esse nome da Planilha pra nao ter que ficar copiando e colando?

    • @CanalSGP
      @CanalSGP  5 месяцев назад

      Bom dia, teste colocar With Activesheet

  • @PernambucoMeuPaisOficial
    @PernambucoMeuPaisOficial 2 года назад +1

    Loop

  • @anacleideflorencio4020
    @anacleideflorencio4020 4 месяца назад

    Olá, tenho uma quantidade de células com tamanho da fonte maior e quero salvar em outra linha com fonte menor no vba

    • @CanalSGP
      @CanalSGP  4 месяца назад +1

      Boa tarde, teste gravar uma macro para capturar o código fazendo o processo de forma manual. Depois pode acrescentar o código a sua macro que salva o registro.

  • @loteriastyllus
    @loteriastyllus 4 месяца назад

    Fantástico!
    Estou necessitando de algo parecido, porém, preciso transferir da planilha1 para planilha2, excluindo esses dados da planilha1, com base no critério.
    EX: na coluna "D" tenho ENTRADA e SAÍDA, preciso enviar para planilha2 somente as Saídas.
    Procurei em sua PlayList algo parecido, porém, não encontrei, Caso tenha esse material, Gentileza, poderia enviar o Link?
    Desde já Grato....

    • @CanalSGP
      @CanalSGP  4 месяца назад +1

      Boa tarde, já recebi esta dúvida algumas vezes, mas não consegui desenvolver algo viável ainda.

    • @user-up4fn6eq1s
      @user-up4fn6eq1s 4 месяца назад

      @@CanalSGP Consegui esses 2 dois códigos abaixo, 1º com desenvolvido com "IA", não envia tudo de uma só vez, envia com uma certa quantidade, mas, funciona certinho.
      Já o 2º é seria perfeito, porém, está tendo um pequeno probleminha, nele consta o link do vídeo.
      1º CÓDIGO --------------------------------------------------------------
      Sub TransferirTodosDados()

      Dim ws1 As Worksheet
      Dim ws2 As Worksheet
      Dim rng1 As Range
      Dim rng2 As Range
      Dim cel As Range
      Dim crit As String

      ' Defina as planilhas
      Set ws1 = ThisWorkbook.Sheets("REGISTRO")
      Set ws2 = ThisWorkbook.Sheets("SAIDAS")

      ' Defina o critério (por exemplo, "Valor X")
      crit = "SAÍDA"

      ' Defina o intervalo de dados na coluna D da Planilha1
      Set rng1 = ws1.Range("G1:G" & ws1.Cells(ws1.Rows.Count, "G").End(xlUp).Row)

      ' Percorra cada célula na coluna D da Planilha1
      For Each cel In rng1
      If cel.Value = crit Then
      ' Copie a linha inteira para a Planilha2
      cel.EntireRow.Copy ws2.Cells(ws2.Cells(ws2.Rows.Count, "A").End(xlUp).Row + 1, 1)
      ' Exclua a linha da Planilha1
      cel.EntireRow.Delete
      End If
      Next cel
      End Sub
      -----------------------------------------------------------------------------
      2º CÓDIGO
      Sub Transferir_Saidas()
      Dim LinhaPlan1, LinhaPlan2 As Long
      Dim ColunaPlan2 As Integer
      inicio:
      LinhaPlan1 = 2

      While Planilha2.Range("A" & LinhaPlan1).Value ""
      If Planilha2.Range("G" & LinhaPlan1).Value = "SAÍDA" Then
      LinhaPlan2 = 2
      While Planilha7.Range("A" & LinhaPlan2).Value ""
      LinhaPlan2 = LinhaPlan2 + 1
      Wend
      For ColunaPlan2 = 1 To 51
      Planilha7.Cells(LinhaPlan1, ColunaPlan2).Value = Planilha2.Cells(LinhaPlan1, ColunaPlan2).Value
      Next ColunaPlan2
      Planilha2.Cells(LinhaPlan1, ColunaPlan2).EntireRow.Delete
      GoTo inicio
      End If
      Wend
      LinhaPlan1 = LinhaPlan1 + 1
      'ruclips.net/video/RP3KSSqOTDQ/видео.html
      End Sub

    • @CanalSGP
      @CanalSGP  4 месяца назад +1

      Que bom que conseguiu.

    • @loteriastyllus
      @loteriastyllus 4 месяца назад

      @@CanalSGP obrigado

  • @renzomorishita1330
    @renzomorishita1330 11 месяцев назад

    Professor, o que significa o " . " (ponto) antes da expressão "Cells(Linha, 2).value" ?

    • @CanalSGP
      @CanalSGP  11 месяцев назад +1

      Bom dia, o ponto é porque referenciei a guia da planilha com With, portanto não preciso repetir o nome da guia, mas dentro do with precisa colocar ponto para informar que se trata da guia do with.

    • @renzomorishita1330
      @renzomorishita1330 11 месяцев назад

      Obrigado, Professor!

    • @CanalSGP
      @CanalSGP  11 месяцев назад

      De nada.

  • @TheFatalxD
    @TheFatalxD 3 года назад

    Olá SGP, primeiramente obrigado pela aula. Como faço para determinar até qual linha eu quero a validação, pois em meu relatório tenho linhas em brancas e linhas preenchidas, dessa forma irei utilizar a sua dica do Exit Do, mas não sei como determinar a linha.
    PS: Estou utilizando Msgbox quando houver data futura maior que a atual. Exemplo:
    Dim Linha As Double
    Linha = 1
    With Plan1

    Do

    Linha = Linha + 1

    If .Cells(Linha, 38).Value > Date Then
    Erro = MsgBox("DATA DE ENTREGA MAIOR QUE A DATA ATUAL", vbOKOnly, "Erro")
    End If

    • @CanalSGP
      @CanalSGP  3 года назад +1

      Bom dia, pode colocar um número de linhas fixo para saída do loop, por exemplo:
      Do until Linha = 100
      Vai fazer o laço até a linha 100 e parar.

    • @TheFatalxD
      @TheFatalxD 3 года назад

      @@CanalSGP obrigado deu certo, só fiquei na dúvida se eu quiser usar um If para data específica, eu colocaria assim ?
      Exemplo
      If .Cells (Linha,38).Value < “01/01/1900” then
      Erro = MsgBox …

    • @CanalSGP
      @CanalSGP  3 года назад +1

      Boa tarde, provavelmente vai precisar transformar a data comparativa em número.

  • @TheWAGNER3994
    @TheWAGNER3994 2 года назад

    Boa noite...
    Tenho uma necessidade. Preciso criar uma estrutura para extrair uma lista semrepeticao e todas as possibilidades combinatória .a partir do conteúdo dentro de um espaço de ( 10 linhas e 15 colunas).
    na lista os numeros precisam estar em ordem crescente (da primeira até a décima quinta coluna).
    Vc pode me ajudar?
    Obrigado.

    • @CanalSGP
      @CanalSGP  2 года назад

      Boa noite, não fiz algo semelhante ainda, não sei dizer se é possível.

  • @PernambucoMeuPaisOficial
    @PernambucoMeuPaisOficial 2 года назад +1

    boa noite
    estou usando esse parâmetro :
    Base1.Range("v1048576").End(xlUp).Offset(1, 0).value2 = Result3.Range("c16:t16").value2
    estou copiando de uma planilha para outra do intervalo c16:t16 para sheet base1 , só que só aparece o resultado c16 e não o intervalo ( na base1 estou copiando sempre na próxima célula em branco ), o que estou fazendo de errado ,?
    obrigado

    • @CanalSGP
      @CanalSGP  2 года назад

      Boa noite, acredito que vai precisar utilizar o comando copy, segue like de vídeo sobre esse tema. ruclips.net/video/ynrEzQMmwbI/видео.html

    • @PernambucoMeuPaisOficial
      @PernambucoMeuPaisOficial 2 года назад +1

      @@CanalSGP obrigado

    • @CanalSGP
      @CanalSGP  2 года назад

      De nada

  • @santosexplica
    @santosexplica Год назад

    Preciso copiar e colar dados de 5 em 5 minutos via vba para gerar um banco de dados, tem como?

    • @CanalSGP
      @CanalSGP  Год назад

      Bom dia, não tentei algo assim ainda, mas vou estudar se tem como.

  • @renzoheli1929
    @renzoheli1929 2 года назад

    Boa noite,
    O meu está dando Loop sem Do, porém foi inserido o mesmo. O que pode ser?

    • @CanalSGP
      @CanalSGP  2 года назад

      Bom dia, pode ser um Loop de fato sem do ou um if que está sem o end if

  • @negociosonline40
    @negociosonline40 3 года назад

    Preciso carregar dados na planilha de um link de API fazer a análises destes dados e depois repetir o processo. Tentei fazer com loop mas o loop não deixa a consulta ser carregada. Já usei aplicatiion.wait para fazer essa pausa e carregar a consulta mas também não dá certo.

    • @CanalSGP
      @CanalSGP  3 года назад

      Bom dia, não fiz procedimento assim ainda.

    • @negociosonline40
      @negociosonline40 3 года назад

      @@CanalSGP estou quebrando cabeça, consigo fazer toda a lógica do loop, o problema é que o loop é tão rápido que trava o carregamento da consulta, e sem este carregamento não tem como fazer a análise dos dados. Se puder me dá uma luz ficarei eternamente grato com vc.

    • @CanalSGP
      @CanalSGP  3 года назад

      Boa noite, talvez o que possa fazer é transferir os dados para uma array no VBA e posteriormente fazer a consulta no array.

  • @zzz-ks9lt
    @zzz-ks9lt 2 года назад

    ola, como faço isso em um userform??

    • @CanalSGP
      @CanalSGP  2 года назад

      Bom dia, depende e quais objetos vai utilizar na análise.

  • @eusou8431
    @eusou8431 Месяц назад

    quero substituir no vba a expressão "Linha = 4" por "Linha = primeira celula vazia"

    • @CanalSGP
      @CanalSGP  Месяц назад

      Bom dia, segue link de vídeo sobre localizar próxima linha vazia. ruclips.net/video/7xYugUHnf78/видео.html

  • @edsonrodrigues4314
    @edsonrodrigues4314 2 года назад

    Ops queria ver vc faz codigo pra mim numeros coicidentes pra lotofacil seria loop until

    • @CanalSGP
      @CanalSGP  2 года назад

      Boa tarde, com encomendas não trabalho mais, estou trabalhando para uma empresa agora.

  • @pedropaulocorrieri6056
    @pedropaulocorrieri6056 2 года назад

    Olá, Boa noite, muito útil essa aula, infelizmente não sei da linguagem VBA, gostaria de te pedir uma dica ou um norte
    Tenho que fazer um relatório da minha equipe e mostrar as diferenças apontadas de Dia x Horas Trabalhadas, exemplo
    Tabela com Dados já carregados:
    DATA USER HORAS NO DIA
    15/09/2022 | ppcorrieri | 8
    16/09/2022 | ppcorrieri | 6
    Tenho que trazer a Data e o Resultado para outra tabela a onde as Horas sejam menores do que 8 e dar a resposta como: OK (se Horas = 8) ou: INCONSISTENTE (se Horas < 8)
    resultado esperado:
    DATA RESULTADO
    15/09/2022 | OK
    16/09/2022 | INCONSISTENTE
    A lógica em si eu sei, porém não sei aplicar isso no Excel, tem alguma dica?

    • @CanalSGP
      @CanalSGP  2 года назад

      Bom dia, não fiz algo semelhante ainda, com fórmulas talvez com a função se, mas como se trata de hora provavelmente vai precisar colocar mais uma coluna e transformara a data em hora.