Condividi:        

Problema ricerca dati su più file

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Problema ricerca dati su più file

Postdi Andredrums » 21/09/15 11:11

Buongiorno a tutti.

Sono nuovo del forum e non particolarmente esperto di Macro Excel.

Mi sono imbattuto in un problema : io ho una cartella contenente alcuni file Excel. All'interno di ciascun file Excel ci sono più fogli ed in ciascuno di essi c'è una tabella con alcuni dati. Premetto che tutte le tabelle sono impostate in tutti i file e fogli nella medesima maniera.

Dovrei creare un comando a bottone che mi faccia la ricerca (all'interno della suddetta cartella denominata "Prova") di un determinato valore (da inserire a richiesta) e mi riporti, per ogni cella in cui ha trovato il valore, il nome del file in cui l'ha trovato, il nome del foglio in cui l'ha trovato e una serie di valori presi dalle celle ad esso associate nella stessa colonna.

Allego immagini per esemplificare.....

Immagine

Immagine

Immagine


Ringrazio chiunque abbia la pietà di aiutarmi !


:roll: :roll: :roll:
Andredrums
Newbie
 
Post: 6
Iscritto il: 21/09/15 10:18

Sponsor
 

Re: Problema ricerca dati su più file

Postdi Anthony47 » 21/09/15 12:19

Ciao Andredrums, benvenuto nel forum.
Hum... Vuoi che cerchiamo tutti i "101" presenti in tutti i fogli di tutti i file di quella directory? Forse dovresti essere piu' preciso circa le modalita' di ricerca...

Ti aspettiamo con questi chiarimenti.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Problema ricerca dati su più file

Postdi Marius44 » 21/09/15 12:22

Buongiorno
ma non sarebbe più semplice allegare un file (senza dati sensibili) con le prove che hai fatto e spiegare SOLO il risultato atteso.
Con tutte quelle immagini inserite costringi chi vorrebbe aiutarti a crearsi lo scenario (con possibili eventuali errori).

Ciao,
Mario
Marius44
Utente Senior
 
Post: 655
Iscritto il: 07/09/15 22:00

Re: Problema ricerca dati su più file

Postdi Andredrums » 21/09/15 13:36

Anzitutto grazie per le risposte...


Si..... in effetti è proprio quello che mi occorre! :-? Cercare un valore ( da immettere come scelta) all'interno dei file ( e a sua volta all'interno dei fogli dei vari file) contenuti in quella determinata cartella, riportando in una tabellina ( 3ª immagine allegata) il valore cercato, il nome del file in cui è stato trovato, il nome del foglio in cui è stato trovato, ed una serie di valori posti sotto la casella dove tale valore è stato trovato.

Allego una cartella contenente due file, ognuno dei quali ha all'interno due "fogli". Il valore da ricercare ( in questo esempio che allego) è " 1000 " ed è contenuto ( in tutti i fogli) nella riga 1

in pratica è una cerca verticale su più file e più fogli ! :( :(

https://www.dropbox.com/s/zr0dzjubc1wfjpu/Prova.zip?dl=0
Andredrums
Newbie
 
Post: 6
Iscritto il: 21/09/15 10:18

Re: Problema ricerca dati su più file

Postdi Marius44 » 21/09/15 17:16

Prova a dare uno sguardo a questo indirizzo (senza spazi)

h t t p s://groups.google.com/forum/#!topic/mic ... nHBrPi1a1s

Ciao,
Mario
Marius44
Utente Senior
 
Post: 655
Iscritto il: 07/09/15 22:00

Re: Problema ricerca dati su più file

Postdi Marius44 » 21/09/15 17:40

Ciao Andredrums
Ovviamente quella routine deve essere adattata alle tue esigenze perché:
1° deve stare al di fuori della cartella dove sono i file da cercare (si potrebbe ovviare non facendo aprire il file con un determinato nome);
2° cerca SOLO nel primo Foglio di ogni file della cartella (anche qui si potrebbe ovviare facendo ciclare su tutti i fogli).
Mi sembra un buon punto di partenza.
Ciao,
Mario
Marius44
Utente Senior
 
Post: 655
Iscritto il: 07/09/15 22:00

Re: Problema ricerca dati su più file

Postdi Anthony47 » 21/09/15 23:23

Ci sono due messaggi di Marius prima di questi, guardali e prova quanto ti suggerisce.

Ho comunque preparato anche io un'ipotesi di macro, basata sull'assunzione che la stringa da cercare sia sempre in riga 1, dove i valori numerici sono riportati come Numeri e valori non nuerici come stringhe.
Il codice macro:
Codice: Seleziona tutto
Sub myRiepilogo()
Dim myMatch, myDir, myFile, I As Long, myNext As Long, myRiep As Worksheet, myLFor
'
myLFor = InputBox("Digita la stringa da ricercare (poi ti chiedero' scegliere la directory di ricerca)")
If myLFor = "" Then
    MsgBox ("Nessuna stringa specificata, la procedura viene interrotta...")
    Exit Sub
End If
If IsNumeric(myLFor) Then myLFor = CDbl(myLFor)
'
'scegli la directory in cui sono i file
With Application.FileDialog(msoFileDialogFolderPicker)
    .AllowMultiSelect = False
    .Title = "..Seleziona la directory iniziale..."
    .ButtonName = "Confirm"
    .InitialView = msoFileDialogViewProperties
    .InitialFileName = ""
    .Show
    If .SelectedItems.Count < 1 Then
        MsgBox ("Nessuna selezione; aborted")
        Exit Sub
    End If
    myDir = .SelectedItems(1)
End With
'
Set myRiep = ThisWorkbook.Sheets("RIEP")
myFile = Dir(myDir & "\*.xls*")
Do While myFile <> ""
    Workbooks.Open Filename:=(myDir & "\" & myFile), ReadOnly:=True
    For I = 1 To Worksheets.Count
        myMatch = Application.Match(myLFor, Sheets(I).Range("A1").Resize(1, Columns.Count - 10), 0)
        If Not IsError(myMatch) Then
            myNext = myRiep.Cells(Rows.Count, 1).End(xlUp).Row + 1
            myRiep.Cells(myNext, 1) = Cells(1, myMatch)
            myRiep.Cells(myNext, 2) = ActiveWorkbook.Name
            myRiep.Cells(myNext, 3) = ActiveSheet.Name
            myRiep.Cells(myNext, 4).Resize(1, 8).Value = Application.WorksheetFunction.Transpose(Cells(2, myMatch).Resize(8, 1).Value)
       
        End If
    Next I
    ActiveWorkbook.Close False
myFile = Dir
Loop
MsgBox ("Completato...")
End Sub

Parti da un file nuovo, all'interno del quale avrai inserito un foglio RIEP gia' con le intestazioni della tabella che vuoi compilare.
Il codice va in un "Modulo standard" del progetto vba di questo nuovo file. Da excel: Alt-F11 per aprire l' editor delle macro; Menu /Inserisci /Modulo; copia il codice e incollalo nel frame di dx.

Torna sul file excel, e salva il file in formato .xlsm; poi lancia la macro "myRiepilogo" (Alt-F8, scegli "myRiepilogo" dall' elenco che ti propone, premi Esegui) e vedi, l' effetto che fa:
-ti verra' chiesto di specificare la stringa da ricercare; se la stringa e' vuota la macro termina subito; se la stringa puo' essere convertita in un numero, la macro fa la conversione, altrimenti cerchera' una stringa.
-poi ti verra' chiesto di scegliere la directory in cui sono presenti i file da elaborare; per questo viene usata una finestra di dialogo in stile Windows

A quel punto i file vengono aperti uno dopo l'altro e viene effettuata la ricerca nei singoli fogli, con trasposizione nel foglio RIEP dei dati trovati.

Prova e fai sapere...
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Problema ricerca dati su più file

Postdi Andredrums » 22/09/15 08:39

Ciao Anthony.

Grazie mille per la risposta! si, il codice funziona ma non mi riporta tutti i dati.
In pratica ho provato a sostituire in tutte le cella della riga 1 lo stesso numero, ma mi riporta solamente il primo che trova, lo riporta 2 volte uguale e poi gli altri non li riporta.

:oops: :oops:
Andredrums
Newbie
 
Post: 6
Iscritto il: 21/09/15 10:18

Re: Problema ricerca dati su più file

Postdi Anthony47 » 22/09/15 11:28

Ma quello che hai fatto e' possibile o e' solo un test? Voglio dire, puoi avere due volte lo stesso numero di colata nello stesso giorno?
Comunque c'e' un errore nella parte che preleva i dati per il riepilogo; sostituisci l'ntero blocco "If Not IsError(myMatch) Then / End If" con
Codice: Seleziona tutto
        If Not IsError(myMatch) Then
            myNext = myRiep.Cells(Rows.Count, 1).End(xlUp).Row + 1
            myRiep.Cells(myNext, 1) = Sheets(I).Cells(1, myMatch)
            myRiep.Cells(myNext, 2) = ActiveWorkbook.Name
            myRiep.Cells(myNext, 3) = Sheets(I).Name
            myRiep.Cells(myNext, 4).Resize(1, 8).Value = Application.WorksheetFunction.Transpose(Sheets(I).Cells(2, myMatch).Resize(8, 1).Value)
        End If

(ma questo non risolve il discoroso della numero di colata ripetuto, per cui aspetto prima la risposta alla domanda iniziale).

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Problema ricerca dati su più file

Postdi Andredrums » 22/09/15 12:12

Si, posso avere più volte lo stesso n° di colata ma con le altre variabili diverse.....ed inoltre la cartella è sempre una definita, senza necessità di scelta
Andredrums
Newbie
 
Post: 6
Iscritto il: 21/09/15 10:18

Re: Problema ricerca dati su più file

Postdi Andredrums » 22/09/15 13:05

Scusami.... come posso inserire un msgbox in modo che se non mi trova la colata mi ritorni " Colata non trovata" ?
Andredrums
Newbie
 
Post: 6
Iscritto il: 21/09/15 10:18

Re: Problema ricerca dati su più file

Postdi Anthony47 » 22/09/15 21:57

Allora la nuova macro dovrebbe essere questa:
Codice: Seleziona tutto
Sub myRiepilogo2()
Dim myMatch, myDir, myFile, I As Long, myNext As Long, myRiep As Worksheet, myLFor, myTot As Long
'
myLFor = InputBox("Digita la stringa da ricercare ")
If myLFor = "" Then
    MsgBox ("Nessuna stringa specificata, la procedura viene interrotta...")
    Exit Sub
End If
If IsNumeric(myLFor) Then myLFor = CDbl(myLFor)
'
myDir = "C:\Users\UTENTE1234\Downloads\Prova_byANDREDRUMS"    '<<< La directory dei file, senza \ finale
'
Set myRiep = ThisWorkbook.Sheets("RIEP")
myFile = Dir(myDir & "\*.xls*")
Do While myFile <> ""
    Workbooks.Open Filename:=(myDir & "\" & myFile), ReadOnly:=True
    For I = 1 To Worksheets.Count
        For jj = 1 To Sheets(I).Cells(1, Columns.Count).End(xlToLeft).Column
            If Sheets(I).Cells(1, jj) = myLFor Then
                myTot = myTot + 1
                myNext = myRiep.Cells(Rows.Count, 1).End(xlUp).Row + 1
                myRiep.Cells(myNext, 1) = Sheets(I).Cells(1, jj)
                myRiep.Cells(myNext, 2) = ActiveWorkbook.Name
                myRiep.Cells(myNext, 3) = Sheets(I).Name
                myRiep.Cells(myNext, 4).Resize(1, 8).Value = Application.WorksheetFunction.Transpose(Sheets(I).Cells(2, jj).Resize(8, 1).Value)
            End If
        Next jj
    Next I
    ActiveWorkbook.Close False
myFile = Dir
Loop
MsgBox ("Completato (" & myTot & " colate trovate)")
End Sub

Cancella la precedente e al suo posto inserisci questa. La riga marcata <<< va compilata con la tua directory.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Problema ricerca dati su più file

Postdi Andredrums » 23/09/15 08:26

E' semplicemente perfetto!

Ho apportato solo qualche piccola modifica che mi serviva per alcuni altri casi specifici, ma il ciclo è veramente semplice ed efficace!

Ti ringrazio infinitamente Anthony ! :)
Andredrums
Newbie
 
Post: 6
Iscritto il: 21/09/15 10:18


Torna a Applicazioni Office Windows


Topic correlati a "Problema ricerca dati su più file":


Chi c’è in linea

Visitano il forum: Nessuno e 35 ospiti