Notifications
Clear all

[Resolvido] Consultar um conjunto de dados em outras planilhas por botão

2 Posts
1 Usuários
0 Reactions
648 Visualizações
(@ruymds)
Posts: 6
Active Member
Topic starter
 

Olá Pessoal,

Possuo uma tabela onde a mesma possui 15 colunas (números) de informação. Necessito de uma solução podendo ser via macro/VBA, de um comando no botão localizar em que o mesmo retorne o índice (registro do conjunto da informação pesquisa), conforme a respectiva consulta em outras planilhas.

A Planilha mestre que chamo de “Localiza índice”, contém as informações a qual representa a pesquisa (que vai da Coluna C a Q, conforme o arquivo anexo). Em outras 3 planilhas (que no atual momento precisam estar separadas, mas que ao analisar podem me dizer por elas estarem em um único arquivo podem facilitar a consulta e retorno dos índices) possuem informações com seus respectivos índices.

A ideia é ao clicar em Localizar o Excel busque referências nesses outros documentos (arquivos A,B,C) a procura dessa informação e, se verdadeira, retorne o índice na planilha mãe e que a busca continue até o final das 10 linhas, assim estipuladas.

Postarei as planilhas para que minha ideia possa ser melhor entendida. Tenho feito isso manualmente, e gostaria muito da ajuda a respeito de uma plausível solução. Grato.

Obrigado a quem puder me ajudar.

Rui Maurício

PS.: Possa ser que esteja errado em manter essas 15 coluna, pois isso irá gerar um custo computacional imenso para pesquisar coluna por coluna. Talvez se concatenar (=CONCATENAR(COLUNAX;";";COLUNAY;";";COLUNAZ…)) esse registro de 15 colunas para apenas 1 coluna separado por ; a consulta retorne mais rapidamente. Isso teria que ser feito também nas planilhas A, B, e C.

Os arquivos: Planilhas

 
Postado : 14/07/2020 1:32 pm
(@ruymds)
Posts: 6
Active Member
Topic starter
 

Olá Anderson, 

Fiz a utilização de um dos três modelos enviados. Em partes consegui fazer algumas adaptações concatenando os dados primeiramente. No exemplo, o arquivo possuía 3 arquivos para consulta, porém, no meu projeto possuo 20Plan onde em media possuí um rol de 25.000 linhas de registros em cada planilha. Nesses meus registros não há dados repetidos em nenhuma das planilhas, ou seja nem dados nem índices se repetem.

É possível colocar um "pause" ao encontrar um respectivo registro e já passar para a próxima linha de pesquisa?

Depurando o código, vejo que a informação já localizada ali no início, quer seja na Plan1 ou Plan3, alguma inicial, a pesquisa vai até a última planilha (Plan20) em busca do dado para depois passar para a próxima linha de pesquisa o qual inicia o ciclo novamente.

Se fosse pouco o volume de registros a serem localizados, não necessitaria de tal ação, mas são 816 informações a serem localizados e que retornem seus respectivos índices simultaneamente, e isso consome um tempo monstruoso da máquina para o processamento.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   Application.ScreenUpdating = False
     Dim i As Integer
     Dim colConsolidado As Integer
     Dim lConsolidado As Long
     Dim lPlanAtual As Long
     Dim achou As Boolean
     Dim w As Workbook
     Workbooks.Open "C:\Users\Dados\Downloads\NotasTrimestrais.xlsx"
     Set w = ActiveWorkbook 'percorrer todas as planilhas do arquivo de NT
     For i = 1 To w.Sheets.Count 'se não for a planilha Consolidado
       If Sheets(i).Name <> "Consolidado" Then 'percorre as colunas de 2 a 20da planilha Consolidado
         For colConsolidado = 2 To 20 'verifica se o nome da planilha atual é o mesmo que está na primeira 'linha da planilha Consolidado (Plan1, Plan2, Plan3... Plan20)
           If ThisWorkbook.Sheets("Consolidado").Cells(1, colConsolidado).Value = Sheets(i).Name Then 'a partir da linha 2 da planilha Consolidado lConsolidado = 2 'percorrer a coluna A da planilha Consolidado 'Até encontrar uma linha em branco
           While ThisWorkbook.Sheets("Consolidado").Range("A" & lConsolidado).Value <> "" 'a partir da linha 2 da planilha atual
             lPlanAtual = 2 'ainda não encontrou a COMBINAÇÃO
             achou = False 'percorre a coluna A da planilha atual
             'Até encotrar uma linha em branco
               While Sheets(i).Range("A" & lPlanAtual).Value <> "" 'compara as COMBINAÇÕES da planilha atual com as matrículas da planilha Consolidado 'se as COMBINAÇÕES forem iguais
                 If Sheets(i).Range("A" & lPlanAtual).Value = ThisWorkbook.Sheets("Consolidado").Range("A" & lConsolidado).Value Then
                 'encontrou a COMBINAÇÃO
                 achou = True 'escreve na planilha Consolidado o valor que está na planilha atual "B" ThisWorkbook.Sheets("Consolidado").Cells(lConsolidado, colConsolidado).Value = Sheets(i).Range("B" & lPlanAtual).Value
                 End If 'passa para a próxima linha da planilha atual
                 lPlanAtual = lPlanAtual + 1
               Wend 'passa para a próxima linha da planilha Consolidado
             lConsolidado = lConsolidado + 1
           Wend
           End If 'passa para a próxima coluna da planilha Consolidado (2 a 20)
         Next colConsolidado
       End If 'passa para a próxima planilha deste arquivo
     Next i
     w.Save
     w.Close
   Application.ScreenUpdating = True
End Sub

Se puder me ajudar fico grato.


Editado pela moderação. Motivo: 1) Utilize o botão Código (< >) para inserir código VBA ou Fórmulas. 2) Removido o status de Privado. 3) Código postado estava sem quebras de linha.

 
Postado : 22/07/2020 12:38 am