Notifications
Clear all

Buscar dados em outra pasta de trabalho.

7 Posts
3 Usuários
0 Reactions
1,415 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa tarde!
A planilha (TesteNova) tem um código VBA para buscar informação em outra pasta de trabalho (RELATÓRIOS1), mesmo o código estando escrito de forma tosca ele funciona perfeitamente, só que agora necessito que faça busca com mais um critério e que me devolva todos os resultados encontrados.
Não tenho a menor ideia de como fazer.
Se aguém puder ajudar e até mesmo melhorar o código, eu agradeço!
Doni

Ps: os critérios para busca na planilha "RELATÓRIOS1" são: nº do LOTE (Coluna A) e nº da AMOSTRA (Coluna B).

Sub VlookMultipleWorkbooks1()
Dim lookFor As Range
Dim srchRange As Range
Dim book1 As Workbook
Dim book2 As Workbook

'Define as pastas de trabalho:
Set book1 = Workbooks("TesteNova")
Set book2 = Workbooks("RELATÓRIOS1")

'Define o que vamos procurar:
Set lookFor = book1.Sheets(1).Cells(2, 1)
    Set srchRange = book2.Sheets(1).Range("A:L") 'Fonte de dados

    lookFor.Offset(0, 1).Value = Application.VLookup(lookFor, srchRange, 2, False)

Set lookFor = book1.Sheets(1).Cells(2, 1)
    Set srchRange = book2.Sheets(1).Range("A:L") 'Fonte de dados

    lookFor.Offset(0, 2).Value = Application.VLookup(lookFor, srchRange, 3, False)

Set lookFor = book1.Sheets(1).Cells(2, 1) 'Valor á encontrar
    Set srchRange = book2.Sheets(1).Range("A:L") 'Fonte de dados

    lookFor.Offset(0, 3).Value = Application.VLookup(lookFor, srchRange, 4, False)

Set lookFor = book1.Sheets(1).Cells(2, 1)
    Set srchRange = book2.Sheets(1).Range("A:L") 'Fonte de dados

    lookFor.Offset(0, 4).Value = Application.VLookup(lookFor, srchRange, 8, False)

Set lookFor = book1.Sheets(1).Cells(2, 1)
    Set srchRange = book2.Sheets(1).Range("A:L") 'Fonte de dados

    lookFor.Offset(0, 5).Value = Application.VLookup(lookFor, srchRange, 10, False)

Set lookFor = book1.Sheets(1).Cells(2, 1)
    Set srchRange = book2.Sheets(1).Range("A:L") 'Fonte de dados

    lookFor.Offset(0, 6).Value = Application.VLookup(lookFor, srchRange, 11, False)


End Sub

 
Postado : 29/03/2017 11:06 am
(@mprudencio)
Posts: 0
New Member
 

Tente um if

if primeira coluna de busca = criterio1 AND segunda coluna de busca = criterio2 then

ou seja se as duas condiçoes forem verdadeiras vai retornar os dados.

Sugiro nao usar vkloop, é mais rapido e mais facil de fazer manutenção se fizer um loop com do while ou for next.

 
Postado : 29/03/2017 12:10 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Marcelo obrigado pelas dicas, mas meus conhecimentos de VBA são limitados.

 
Postado : 29/03/2017 5:11 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Bom dia!
Continuo tentando, kkkkkkkk
Alguém pode melhorar isto pra mim?

Sub VlookMultipleWorkbooks()
    ' constante
    Const book2Name = "RELATÓRIOS1.xls"
    ' declaração
    Dim lookFor As Range
    Dim srchRange As Range
    Dim book1 As Workbook
    Dim book2 As Workbook
    Dim I As Long
    ' inicio
    'On Error Resume Next
    Set book1 = ThisWorkbook
    Set book2 = Workbooks(book2Name)
    Set lookFor = book1.Sheets("Plan1").Range("A2:A5")
    Set srchRange = book2.Sheets("TEMPO EM ABERTO").Range("A:L")
    ' processo
    With Application.WorksheetFunction
        For I = 1 To lookFor.Rows.Count
            lookFor.Cells(I, 1).Offset(0, 1).Value = _
                .Index(srchRange, _
                    .Match(lookFor.Cells(I, 1).Value, srchRange.Columns(1).Cells, 0), _
                    2)
        Next I
        For I = 1 To lookFor.Rows.Count
            lookFor.Cells(I, 1).Offset(0, 2).Value = _
                .Index(srchRange, _
                    .Match(lookFor.Cells(I, 1).Value, srchRange.Columns(1).Cells, 0), _
                    3)
        Next I
        For I = 1 To lookFor.Rows.Count
            lookFor.Cells(I, 1).Offset(0, 3).Value = _
                .Index(srchRange, _
                    .Match(lookFor.Cells(I, 1).Value, srchRange.Columns(1).Cells, 0), _
                    4)
        Next I
        For I = 1 To lookFor.Rows.Count
            lookFor.Cells(I, 1).Offset(0, 4).Value = _
                .Index(srchRange, _
                    .Match(lookFor.Cells(I, 1).Value, srchRange.Columns(1).Cells, 0), _
                    8)
        Next I
        For I = 1 To lookFor.Rows.Count
            lookFor.Cells(I, 1).Offset(0, 5).Value = _
                .Index(srchRange, _
                    .Match(lookFor.Cells(I, 1).Value, srchRange.Columns(1).Cells, 0), _
                    10)
        Next I
        For I = 1 To lookFor.Rows.Count
            lookFor.Cells(I, 1).Offset(0, 6).Value = _
                .Index(srchRange, _
                    .Match(lookFor.Cells(I, 1).Value, srchRange.Columns(1).Cells, 0), _
                    11)
        Next I
    End With
    ' fim
    Set srchRange = Nothing
    Set lookFor = Nothing
    Set book2 = Nothing
    Set book1 = Nothing
End Sub




 
Postado : 31/03/2017 8:21 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Senhores, bom dia!

Preciso imprimentar no código abaixo dois critérios de busca:
critérios: buscar os dados na planilha RELATÓRIOS1, se os mesmos estiverem na coluna "A" e "B" da planilha TesteNova, seria como se fosse um PROCV com dois critérios.

Desde já agradeço!

Doni

Sub VlookMultipleWorkbooks()
    ' constante
    Const book2Name = "RELATÓRIOS1.xls"
    ' declaração
    Dim lookFor As Range
    Dim srchRange As Range
    Dim book1 As Workbook
    Dim book2 As Workbook
    Dim I As Long
    ' inicio
    'On Error Resume Next
    Set book1 = ThisWorkbook
    Set book2 = Workbooks(book2Name)
    Set lookFor = book1.Sheets("Plan1").Range("A2:A5")
    Set srchRange = book2.Sheets("TEMPO EM ABERTO").Range("A:L")
    ' processo
    With Application.WorksheetFunction
        For I = 1 To lookFor.Rows.Count
            lookFor.Cells(I, 1).Offset(0, 1).Value = _
                .Index(srchRange, _
                    .Match(lookFor.Cells(I, 1).Value, srchRange.Columns(1).Cells, 0), _
                    2)
        Next I
        For I = 1 To lookFor.Rows.Count
            lookFor.Cells(I, 1).Offset(0, 2).Value = _
                .Index(srchRange, _
                    .Match(lookFor.Cells(I, 1).Value, srchRange.Columns(1).Cells, 0), _
                    3)
        Next I
        For I = 1 To lookFor.Rows.Count
            lookFor.Cells(I, 1).Offset(0, 3).Value = _
                .Index(srchRange, _
                    .Match(lookFor.Cells(I, 1).Value, srchRange.Columns(1).Cells, 0), _
                    4)
        Next I
        For I = 1 To lookFor.Rows.Count
            lookFor.Cells(I, 1).Offset(0, 4).Value = _
                .Index(srchRange, _
                    .Match(lookFor.Cells(I, 1).Value, srchRange.Columns(1).Cells, 0), _
                    8)
        Next I
        For I = 1 To lookFor.Rows.Count
            lookFor.Cells(I, 1).Offset(0, 5).Value = _
                .Index(srchRange, _
                    .Match(lookFor.Cells(I, 1).Value, srchRange.Columns(1).Cells, 0), _
                    10)
        Next I
        For I = 1 To lookFor.Rows.Count
            lookFor.Cells(I, 1).Offset(0, 6).Value = _
                .Index(srchRange, _
                    .Match(lookFor.Cells(I, 1).Value, srchRange.Columns(1).Cells, 0), _
                    11)
        Next I
    End With
    ' fim
    Set srchRange = Nothing
    Set lookFor = Nothing
    Set book2 = Nothing
    Set book1 = Nothing
End Sub




Doni
Membro
Membro
 
Mensagens: 289
Registrado em: 29 Nov 2009, 03:21
Localização: Sorocaba,SP
Agradeceu : 12 vezes
Foi agradecido: 75 vezes
 
Postado : 01/04/2017 5:41 am
(@osvaldomp)
Posts: 857
Prominent Member
 

Olá, Doni.

Sugestão - para facilitar a obtenção de ajuda disponibilize uma amostra de cada Pasta de Trabalho, com algumas linhas com dados, com o resultado desejado, com os critérios explicados nas próprias planilhas e com o código instalado.

 
Postado : 01/04/2017 7:12 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Bom dia!

Já que não consegui com VBA, vai com fórmulas mesmo.

=SE(OU(A7="";B7="");"";(PROC(2;1/($A7='U:Lab Fabrica[RELATÓRIOS1.xls]TEMPO EM ABERTO'!$A$1:$A$65536)/($B7='U:Lab Fabrica[RELATÓRIOS1.xls]TEMPO EM ABERTO'!$B$1:$B$65536);'U:Lab Fabrica[RELATÓRIOS1.xls]TEMPO EM ABERTO'!$C$1:$C$65536)))

Doni

 
Postado : 12/04/2017 8:44 am