Como pesquisar vários arquivos por um valor correspondente ao texto na mesma linha no Excel?

0

Eu sei que isso é um grito me ajudar a postar, mas eu tenho essa tarefa e não sei como fazê-lo a tempo.

Tenho conhecimento moderado de excel, mas não conheço nenhum VBA. Eu aprendi C ++, então eu entendo código e especialmente a lógica por trás do código.

A tarefa que precisa ser feita é: Somos uma pequena startup que vende brinquedos educativos. Um total de 8 produtos. Então, aparentemente, ninguém estava mantendo uma contagem de nossos produtos vendidos item sábio. Temos mais de 200 faturas que listam cada transação. Agora eu preciso de uma maneira de pesquisar todos esses arquivos para uma string de texto, por exemplo, "superusuário" e depois me dar o número na coluna ao lado para um determinado formato de faturas e na coluna 3 para a direita número 4 se estiver usando vlookup) para outro formato. Sim, temos dois formatos por algum motivo. Eu posso separar os dois formatos em diferentes pastas.

Existe alguma maneira de fazer isso sem abrir manualmente cada arquivo e, em seguida, manter um registro?

dit: Todos os arquivos são excelentes e se parecem com este link (infelizmente, isso é uma exportação de pdf, não consigo acessar o original atualmente) Picture O que eu preciso é se a string a ser encontrada for EDGE - Jungle Safari, então eu preciso do valor 64 e do valor 10. Basicamente o valor abaixo de QTY na linha correspondente.

    
por Shaurya K 21.10.2015 / 16:32

1 resposta

1

Configuração inicial

Eu construí um pequeno exemplo que deve te dar o que você está procurando. Primeiro eu configurei alguns arquivos do Excel em uma única pasta, onde alguns contêm a string "abc" e outros não. Eu coloquei alguns que têm mais do que apenas "abc" e em diferentes folhas dentro da mesma pasta de trabalho. Isso deve simular exatamente o que você tem.

Mostrando como funciona depois de concluído

VocêdevefornecerodiretórioinicialcomoeutenhonacélulaA2.

Acodificação

Inicialmente,configuramosumloopparapercorrertodososarquivosquesãoarquivosdoExcelcomestalinha:

fileName=Dir(directory&"*.xl??")

Conforme cada nome de arquivo é encontrado, nós o abrimos usando isto:

Dim wbk As Workbook
With wbk
Set wbk = Workbooks.Open(directory & fileName)
End With

Com cada pasta de trabalho aberta, usamos o comando cells.find para procurar nossa string e fazer isso em cada folha. Se houver uma correspondência, aumentamos nosso contador de variáveis em um:

For Each sh In wbk.Worksheets
    Set found = sh.Cells.Find(what:="abc", LookIn:=xlFormulas)

    If Not found Is Nothing Then
       sh.Activate
       found.Select
       count = count + 1
       Else
    End If
Next sh

Por fim, feche cada pasta de trabalho antes de ir para a próxima, por isso não temos um problema de memória de ter muitas pastas de trabalho abertas:

wbk.Close

Aqui está todo o código criado:

Sub LoopThroughFiles()
Range("'Sheet1'!A6:A10000").ClearContents

Dim directory As String, fileName As String, sheet As Worksheet, i As Integer, j As Integer
directory = "C:\Users\wzcj9x\Desktop\New folder\"
fileName = Dir(directory & "*.xl??")



i = 5
Do While fileName <> ""

i = i + 1

If fileName <> "" Then
Dim wbk As Workbook
With wbk
Set wbk = Workbooks.Open(directory & fileName)
End With


Dim sh As Worksheet
Dim found As Range
Dim count As Integer

For Each sh In wbk.Worksheets
    Set found = sh.Cells.Find(what:="abc", LookIn:=xlFormulas)

    If Not found Is Nothing Then
       sh.Activate
       found.Select
        count = count + sh.Range(found.Address).Offset(0, 3).Value
       Else
    End If
Next sh
wbk.Close
End If



fileName = Dir()

Loop

Range("'Sheet1'!C2").Value = count

End Sub

Você simplesmente precisa executar a macro e ela produzirá uma contagem para você. Se você deseja produzir apenas uma contagem de 1 por pasta de trabalho, independentemente de quantas vezes ela existe na pasta de trabalho, deve ser muito fácil modificar meu método de contagem.

Deixe-me saber se você tem alguma dúvida, mas espero que isso ajude a fazê-lo pelo menos o caminho certo.

Atualizar

Eu atualizei minha pergunta para retornar o valor que é de 3 células à direita da célula encontrada e adicioná-las todas juntas. Isso corresponde à nova atualização do questionador.

Outra atualização baseada em comentários

Eu modifiquei meu código para somar apenas o valor máximo que atende aos critérios por pasta de trabalho e, em seguida, incluo apenas esses valores:

Dim max As Integer

max = 0

For Each sh In wbk.Worksheets

    Set found = sh.Cells.Find(what:="abc", LookIn:=xlFormulas)

    If Not found Is Nothing Then
       sh.Activate
       found.Select

       If sh.Range(found.Address).Offset(0, 3).Value > max Then
       max = sh.Range(found.Address).Offset(0, 3).Value
       End If

       Else
    End If
Next sh

      count = count + max

wbk.Close
    
por 21.10.2015 / 17:41