Notifications
Clear all

[Resolvido] Armazenar o endereço de uma célula em uma variável sem percorrer todas as linhas

5 Posts
2 Usuários
1 Reactions
1,012 Visualizações
(@matteus0203)
Posts: 8
Active Member
Topic starter
 

Bom dia!

Tenho uma coluna com muitos números (nenhum deles repetidos) e queria uma forma de armazenar o endereço de um número específico dessa coluna em uma variável sem precisar percorrer linha por linha usando um Do While. Gostaria de saber se alguém conhece uma forma.

Desde já agradeço!

 
Postado : 09/03/2021 6:27 am
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

Há várias maneiras de fazer isso, @matteus0203. Usar o método Find, a WorksheetFunction Match ou VLookup, SpecialCells...

Pra facilitar, anexe um arquivo já com esses números na coluna certa, explicando também o que quer fazer com essa variável, se ela mudará de valor ao mudar algo na pasta de trabalho ou só armazenar ao abrir o arquivo, enfim... dê-nos mais detalhes do que deseja fazer com isso.

 
Postado : 09/03/2021 6:51 pm
(@matteus0203)
Posts: 8
Active Member
Topic starter
 

Primeiramente obrigado pela resposta!

Edons, anexei a planilha para o senhor apreciar. Precisei reduzi-la a menos de 10% do seu tamanho para carregá-la aqui.

O meu problema é o seguinte, na coluna "M" tenho códigos, e gostaria de obter o endereço de um código específico nesta mesma coluna e armazená-lo numa variável, para ir até ela com um Range(variável).select. Gostaria disso pois não queria fazer um "Do while" usando o selection.end para achar esse código e assim armazenar o seu endereço, pois como já falei, a planilha é muito maior que esta que eu anexo, e em testes somente esta procura chegou a durar 4 minutos cada uma. Como quero inserir esta procura numa rotina que irá repeli-la centenas de vezes, a duração da rotina irá ficar inviável.

Tentei o método Find, mas como a planilha é muito extensa, a procura usando este método também demora em torno de 4 minutos cada uma. Então lancei mão da ajuda de algum dos amigos deste site para tentar uma forma de contornar isto.

Desde já agredeço!

 
Postado : 11/03/2021 5:42 pm
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 
 
Postado por: @matteus0203

na coluna "M" tenho códigos, e gostaria de   obter o endereço de um código específico nesta mesma coluna e armazená-lo numa variável, para  ir até ela com um Range(variável).Select.

Entendi que vc quer entrar com um daqueles códigos numéricos, digamos 606347 e então ir para aquela posição na planilha. Seria isso? Nesse caso nem precisaria armazenar o endereço numa variável, dá pra ir direto.

Pra melhorar a performance, reduza o Range a pesquisar para apenas aquelas células que contém valores numéricos, usando SpecialCells.

Sub EncontraNúm()
  On Error Resume Next
  Worksheets("MODELO").Range("M:M").SpecialCells(xlCellTypeConstants, xlNumbers) _
                      .Find(What:=InputBox("PROCURAR NÚMERO:"), _
                            LookIn:=xlValues, _
                            LookAt:=xlWhole) _
                      .Select
End Sub

 
Postado : 11/03/2021 8:34 pm
matteus0203 reacted
(@matteus0203)
Posts: 8
Active Member
Topic starter
 

@edsonbr, Bingo!

O seu Sub conseguiu fazer o que eu queria, encontrar com rapidez o código desejado. Mas a minha necessidade era fazer a rotina que estou produzindo procurar automaticamente, sem eu precisar inserir o código manualmente, pois queria programar ela pra armazenar o código de uma lista e procurá-lo, voltando à lista novamente em outra rodada, armazenando outro código, procurando-o e assim por diante. Então o meu código ficou da seguinte forma:

 

(Declarei uma variável)

Dim codigo as string

(Armazenei o código desejado na variável e depois pedi pra procurá-lo)

 On Error Resume Next
Worksheets("MODELO").Range("M:M").SpecialCells(xlCellTypeConstants, xlNumbers) _
.Find(codigo, _
LookIn:=xlValues, _
LookAt:=xlWhole) _
.Select 

Funcionou muito bem e com rapidez.

Agradeço, Edson!

 
Postado : 12/03/2021 12:44 am