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...