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