Notifications
Clear all

[Resolvido] Loop infinito

9 Posts
4 Usuários
1 Likes
1,466 Visualizações
Bautto
(@bautto)
Posts: 70
Estimable Member
Topic starter
 

Colegas, bom dia.

Depois de algum tempo retorno para solicitar ajuda dos mestres do fórum...

Na Planilha anexa, preciso localizar os dados existentes na coluna "A", dentro dos documentos da coluna "C", que estão todos colados no formato de texto. (estes dados são de fonte externa e não tenho como transformar em colunas).

Os documentos da coluna "C" não podem não conter os dados da coluna "A" e estarem fora de ordem...

Preciso colocar na coluna "B", ao lado do dado pesquisado, se foi encontrado ou não.

Se sim, deveria sair do loop e fazer nova pesquisa, ou continuar, até o resultado final.

Fiz a rotina contida no módulo 1. mas ela entra em loop infinito e não encontrei como sair, 

Neste exemplo, são poucos os documentos, porém, no trabalho todo tem mais de 150 mil linhas...

Peço o auxilio de alguém da comunidade e já agradeço antecipadamente...

 
Postado : 10/12/2021 10:13 am
DJunqueira
(@dmorais)
Posts: 0
Active Member
 

Vc poderia utilizar uma fórmula apenas como a abaixo:

=PROCX(A2; ESQUERDA(C:C; 6); LIN(C:C); 0; 0; 2)*LIN($A$2:$A$339)^0

Tb poderia utilizar Power Query dependendo da sua versão do Excel, fora isso não ficou claro q tipo de resposta vc quer, seria o número da linha?

Os números da coluna 'C' parecem menores q os da coluna 'A', seria isso mesmo?

 
___________________________
Editado pela moderação. Motivo: infelizmente de um tempo pra cá o mecanismo do fórum tem mutilado fórmulas e códigos em sua exibição, mesmo utilizando a tag [code] ( <> ) e os fragmentos perdidos só reaparecem ao editar a mensagem ou fazer sua citação. Uma maneira de contornar esse problema é inserindo espaços em branco em pontos que não alterem a lógica ou funcionamento da fórmula ou código, como antes e/ou após pontos-e-vírgulas ou inícios e finais de parênteses, que é o que foi feito nesta edição. Agradecemos a compreensão.
 
Postado : 10/12/2021 6:12 pm
Raygsson
(@raygsson)
Posts: 68
Trusted Member
 

Em VBA gosto de trabalhar com matrizes por conta da velocidade, segue uma solução para o seu problema:

 

Sub BuscaDoc_()

Planilha1.Range("B2:B1000000").ClearContents

codigos = Planilha1.Range("A2:A" & Planilha1.Range("A1000000").End(xlUp).Row)
textos = Planilha1.Range("C2:C" & Planilha1.Range("C1000000").End(xlUp).Row)

For i = 1 To UBound(codigos)
    
    For Each Texto In textos
    
        If InStr(Texto, codigos(i, 1)) > 0 Then
        
            Planilha1.Cells(i + 1, "B") = "OK!"
            Exit For
            
        End If
        
    Next

Next

End Sub
 
Postado : 10/12/2021 10:49 pm
EdsonBR
(@edsonbr)
Posts: 1056
Noble Member
 

Pra fazer com fórmula, caso a versão de seu Excel seja inferior à 365, poderia ainda usar uma das seguintes fórmulas matriciais em B2 e arrastar (finalize com CTRL SHIFT ENTER ao invés de ENTER):

=SOMA(1*ÉNÚM(LOCALIZAR(A2; SE(ESQUERDA($C$2:$C$313;6) = "C.G.C."; EXT.TEXTO($C$2:$C$313; 54; 6 )))))>0

OU

=ÉTEXTO(PROCV(A2; SE(ESQUERDA($C$2:$C$313; 6) = "C.G.C.";EXT.TEXTO($C$2:$C$313; 54; 6)); 1 ; FALSO))

 
Postado : 11/12/2021 3:11 am
Bautto
(@bautto)
Posts: 70
Estimable Member
Topic starter
 

Colegas, agradeço imensamente sua ajuda.

As soluções apresentadas pelo Raygsson e pelo EdsonBR atenderam perfeitamente minha necessidade.

Quanto ao sugerido pelo DJunqueira o resultado da fórmula não correspondeu à expectativa, pois o retorno foi apenas "0" em todas as linhas, quando nas linhas 2 a 7 e 9 a 11 deveria ser "OK", ou Verdadeiro e na linha 8, " " ou Falso, que é o que eu buscava.

Observações:

1- Em relação às sugestões do EdsonBR, gostaria apenas de observar que a posição "54" não é constante, coisa que eu não disse no primeiro post. Dessa forma peço que, se possível, me oriente quanto ao que fazer para contornar essa variável.

2- A solução em VBA resolveu 100% a questão. Apenas gostaria, contando com a paciência do Raygsson, que fizesse a definição das variáveis, pois a instrução "For i = 1 To UBound(codigos)" se refere a uma matriz, e não consegui identificá-la.

Novamente, quero agradecer aos colegas a disposição em colaborar com a solução. Muito Obrigado.

 
Postado : 11/12/2021 11:29 am
EdsonBR
(@edsonbr)
Posts: 1056
Noble Member
 
 
Postado por: @bautto

...a posição "54" não é constante, coisa que eu não disse no primeiro post. Dessa forma peço que, se possível, me oriente quanto ao que fazer para contornar essa variável.

Ok, @Bautto. Então por gentileza anexe uma planilha com alguns exemplos com todas as variantes possíveis para que possamos identificar o que muda.

 
Postado : 11/12/2021 1:45 pm
Bautto
(@bautto)
Posts: 70
Estimable Member
Topic starter
 

EdsonBR, boa noite.

Desculpe a demora para responder, mas o trabalho está grande...

Na realidade, a mudança de posição é a única variação que tem. A partir de um momento, o documento a ser pesquisado passou a ter uma coluna a mais, conforme o último documento do modelo anexo.

Agradeço sua atenção.

Abçs.

 
Postado : 14/12/2021 6:48 pm
EdsonBR
(@edsonbr)
Posts: 1056
Noble Member
 

Pra mim as fórmulas que fiz continuam a funcionar, pois mesmo a partir do ponto em que a tabelinha muda, a linha onde está o valor do campo "REFERÊNCIA" continua sendo de largura fixa e marcada pelas posições, começando sempre com "C.G.C" e o primeiro algarismo de interesse na posição 54 com comprimento 6 caracteres.

Só não esquece de alterar a abrangência do intervalo, pois na minha fórmula anterior considerei da linha 2 até a 313 e agora cresceu (quanto a isso lembre-se que vc sempre pode usar um intervalo dinâmico ou um nomeado p/ abranger todos os dados)

 
Postado : 14/12/2021 9:36 pm
Bautto reacted
Bautto
(@bautto)
Posts: 70
Estimable Member
Topic starter
 
Postado por: @edsonbr

Pra mim as fórmulas que fiz continuam a funcionar, pois mesmo a partir do ponto em que a tabelinha muda, a linha onde está o valor do campo "REFERÊNCIA" continua sendo de largura fixa e marcada pelas posições, começando sempre com "C.G.C" e o primeiro algarismo de interesse na posição 54 com comprimento 6 caracteres.

Só não esquece de alterar a abrangência do intervalo, pois na minha fórmula anterior considerei da linha 2 até a 313 e agora cresceu (quanto a isso lembre-se que vc sempre pode usar um intervalo dinâmico ou um nomeado p/ abranger todos os dados)

EdsonBR, boa tarde.

Muito obrigado, você tem razão, minha "range" não chegava ao documento...

Agradeço suas informações.

 
Postado : 15/12/2021 1:06 pm