Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Cercare un valore in diversi file automaticamente

683 views
Skip to first unread message

Sergio

unread,
Oct 28, 2009, 2:23:27 AM10/28/09
to
Ciao a tutti,
come si pu� impostare una macro che cerchi un determinato dato (ad es.
"ABC123" in tutti i fogli di tutti i files di una cartella?
Il massimo sarebbe avere un elenco con il risultato della ricerca, del tipo:
NOME FILE - NOME FOGLIO - INDIRIZZO CELLA
Grazie in anticipo per l'aiuto.
Sergio


Mauro Gamberini

unread,
Oct 28, 2009, 4:26:35 AM10/28/09
to

Proviamo.

In un nuovo file di Excel, il codice qui
sotto in un modulo standard ed elencheremo
i dati nel suo Foglio1 nelle seguenti colonne:

A: NomeFile
B: NomeFoglio
C: RiferimentoCella

Il codice:

Public Sub mRicerca(ByVal vRicerca As Variant, sPath As String)

'dichiaro le variabili
Dim objFSO As Object
Dim objFolder As Object
Dim objFile As Object
Dim wk As Workbook
Dim sh As Worksheet
Dim shMe As Worksheet
Dim lUltRiga As Long
Dim c As Range

'impedisco lo sfarfallio del monitor
With Application
.ScreenUpdating = False
End With
'metto un riferimento al Foglio1
'di questa cartella di Excel
Set shMe = ThisWorkbook.Worksheets("Foglio1")

'trovo l'ultima riga con dati
'della colonna A, Foglio1,
'di questa cartella di Excel
With shMe
lUltRiga = .Range( _
"A" & .Rows.Count _
).End(xlUp).Row
End With

'creo duo oggetti
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(sPath)

'ciclo i files della cartella
For Each objFile In objFolder.Files
'se sono files di Excel
Select Case LCase(Right(objFile.Name, 4))
Case ".xls", "xlsx", "xlsm"
'li apro
Set wk = Workbooks.Open(objFile.Path)
'ciclo i fogli
For Each sh In wk.Worksheets
'ciclo le celle dei fogli
For Each c In sh.UsedRange
'se il contenuto della cella
'corrisponde al valore cercato
If c.Value = vRicerca Then
'nuova riga in Foglio1 di questa
'cartella
lUltRiga = lUltRiga + 1
'recupero il nome del file
shMe.Range("A" & lUltRiga).Value = _
objFile.Name
'recupero il nome del foglio
shMe.Range("B" & lUltRiga).Value = _
sh.Name
'recupero l'indirizzo della cella
'(togliere False False se si vuole
'l'indirizzo tipo $A$1)
shMe.Range("C" & lUltRiga).Value = _
c.Address(False, False)
End If
Next
'chiudo il file
wk.Close
'Set a Nothing della variabile oggetto
Set wk = Nothing
Next
End Select
Next

'ripristino l'update del monitor
With Application
.ScreenUpdating = True
End With

'Set a Nothing delle variabili oggetto
Set c = Nothing
Set wk = Nothing
Set sh = Nothing
Set shMe = Nothing
Set objFile = Nothing
Set objFolder = Nothing
Set objFSO = Nothing

End Sub

Da richiamare cos�:

'richiamo la routine mRicerca
Public Sub m()
'cerco il valore 1 in tutti i fogli
'dei files presenti nella cartella
'C:\Cartella
Call mRicerca(1, "C:\Cartella")
End Sub

Come vedi mRicerca si aspetta due parametri.
Il primo � un Variant, quindi pu� essere
qualsiasi cosa: 1, "Mario", 1000, ecc.
Il secondo � uno String ed � la Path
della cartella in cui fare la ricerca
(nota, senza la \ finale).

Prova un po' e poi, gentilmente,
fai sapere se va bene. Grazie.

Qui puoi inoltre trovare(fra qualche minuto
dall'ora di invio di questa risposta) il file che ho
utilizzato per le prove:

http://www.maurogsc.eu/esemping/cercaneifiles.zip

Grazie per l'attenzione.

--
---------------------------
Mauro Gamberini
http://www.riolab.org/
http://www.maurogsc.eu/
http://social.microsoft.com/Forums/it-IT/excelit/threads


r

unread,
Oct 28, 2009, 7:17:01 AM10/28/09
to
"Mauro Gamberini" ha scritto:

> > come si può impostare una macro che cerchi un determinato dato (ad es.

> Da richiamare così:


>
> 'richiamo la routine mRicerca
> Public Sub m()
> 'cerco il valore 1 in tutti i fogli
> 'dei files presenti nella cartella
> 'C:\Cartella
> Call mRicerca(1, "C:\Cartella")
> End Sub
>
> Come vedi mRicerca si aspetta due parametri.

> Il primo è un Variant, quindi può essere


> qualsiasi cosa: 1, "Mario", 1000, ecc.

> Il secondo è uno String ed è la Path


> della cartella in cui fare la ricerca
> (nota, senza la \ finale).
>
> Prova un po' e poi, gentilmente,
> fai sapere se va bene. Grazie.
>
> Qui puoi inoltre trovare(fra qualche minuto
> dall'ora di invio di questa risposta) il file che ho
> utilizzato per le prove:
>
> http://www.maurogsc.eu/esemping/cercaneifiles.zip
>
> Grazie per l'attenzione.
>
> --
> ---------------------------
> Mauro Gamberini
> http://www.riolab.org/
> http://www.maurogsc.eu/
> http://social.microsoft.com/Forums/it-IT/excelit/threads
>
>

> .
>

ciao Mauro ...
aggiungo solo (non ho provata la tua ma così leggendola ...) che FSO (che
amo) cotempla:
Metodo FolderExists (GetFolder restituisce un errore nel caso la cartella
non esista)
Metodo GetExtensionName (per recuperare l'estensione del file)

... ma era più che altro l'occasione di salutarti.
ciao
r

--
Come e dove incollare il codice:
http://www.rondebruin.nl/code.htm

Il mio ultimo lavoro ...
http://excelvba.altervista.org/blog/index.php/Excel-VBA/UsedRange-eccezioni-e-alternative.html


Mauro Gamberini

unread,
Oct 28, 2009, 9:18:27 AM10/28/09
to
> ... ma era più che altro l'occasione di salutarti.
> ciao
>

E ciao a te, Roberto...;-)

--
---------------------------
Mauro Gamberini
http://www.riolab.org/
http://www.maurogsc.eu/

http://social.microsoft.com/Forums/it-IT/officeit/threads

Sergio

unread,
Oct 29, 2009, 1:53:23 AM10/29/09
to
Grazie mille Mauro, gentilissimo, ed � perfetto!
P.S. nel box con le istruzioni del file contenente la macro, forse ci vuole
ALT+F11?
Ciao!
Sergio

"Mauro Gamberini" <maurogsc...@RIMUOVEREaliceposta.it> ha scritto nel
messaggio news:%23ecphh6...@TK2MSFTNGP06.phx.gbl...

Mauro Gamberini

unread,
Oct 29, 2009, 4:48:12 AM10/29/09
to
> Grazie mille Mauro, gentilissimo, ed � perfetto!
> P.S. nel box con le istruzioni del file contenente la macro, forse ci
> vuole ALT+F11?
>

Certo, certo, ALT+F11.
La maledetta fretta!
Grazie a te per il riscontro e la giusta
correzione.
Buon lavoro.

alessio tempestini

unread,
Feb 12, 2023, 12:02:30 PM2/12/23
to
Buonasera, riprendo questo vecchio post. Sono un assoluto neofita e volevo chiedere se vi fosse possibile realizzare quanto sotto e nel caso se foste disposti a spiegarmi passo passo. magari se vi torna meglio possiamo fare anche telefonicamente.
Io ho una serie di file Excel, (non riesco ad allegare il file) in cui sono riportati vari articoli di prodotto.
Io vorrei creare un automatismo in cui il nuovo file di Excel che andrò a creare, mi riporti gli articoli (colonna C del file allegato) di tutti i file Excel presi in considerazione, e la somma per articolo (colonna F del file allegato) sommato per tutti i file Excel presi in considerazione.
In pratica fare una somma suddivisa per articolo dei vari file di Excel.
Grazie in anticipo.

casanmaner

unread,
Feb 13, 2023, 8:26:05 AM2/13/23
to
Il giorno domenica 12 febbraio 2023 alle 18:02:30 UTC+1 alessio tempestini ha scritto:
> Buonasera, riprendo questo vecchio post. Sono un assoluto neofita e volevo chiedere se vi fosse possibile realizzare quanto sotto e nel caso se foste disposti a spiegarmi passo passo. magari se vi torna meglio possiamo fare anche telefonicamente.
> Io ho una serie di file Excel, (non riesco ad allegare il file) in cui sono riportati vari articoli di prodotto.
> Io vorrei creare un automatismo in cui il nuovo file di Excel che andrò a creare, mi riporti gli articoli (colonna C del file allegato) di tutti i file Excel presi in considerazione, e la somma per articolo (colonna F del file allegato) sommato per tutti i file Excel presi in considerazione.
> In pratica fare una somma suddivisa per articolo dei vari file di Excel.
> Grazie in anticipo.

Penso sia meglio creare un nuovo topic dove spiegare bene la cosa eventualmente rendendo disponibili i file, sia quello che dici essere il "nuovo file" che quelli da cui prelevare i dati, tramite un servizio cloud (es. dropbox).
Magari specificando se i file da cui prelevare i dati sono salvati tutti in un determinato percorso del pc, nel quale sapere se eventualmente ci sono anche altri file, sapere se sono nominati in modo sistematico in base a determinati parametri, se la loro struttura è uguale per tutti i file.
Diversamente senza informazioni dettagliate difficilmente qualcuno potrà anche solo pensare ad una possibile soluzione, tra le tante possibili.
0 new messages