Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[EXCEL] macro per copiare valori da diversi files excel

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

[EXCEL] macro per copiare valori da diversi files excel

Postdi superpippa » 19/07/11 18:10

Buongiorno a tutti,
ho n files excel, tutti salvati nella stessa cartella (C:\REPORT)

Questi files sono tutti uguali tra loro ed hanno nome
REPORT.XLS;
REPORT (1).XLS;

REPORT (n).XLS

In un nuovo file (“RIEPILOGO.XLS”) dovrei fare in modo che compaiano i valori di alcune celle di ciascuno dei files “REPORT”, ed in particolare:
in A1 di RIEPILOGO.XLS compaia il valore di H2 del file REPORT.XLS
in B1 di RIEPILOGO.XLS compaia il valore di E4 del file REPORT.XLS

in A2 di RIEPILOGO.XLS compaia il valore H2 del file REPORT (1).XLS
in B2 di RIEPILOGO.XLS compaia il valore E4 del file REPORT (1).XLS

e così via fino ad arrivare all’ultimo file presente nella cartella (il numero di files è variabile).

Tutti i dati che mi interessano sono contenuti nel primo foglio di lavoro dei files REPORT (x) che è nominato “REPORT MESE”.

In realtà devo “caricare” molti altri dati, ma una volta capito il meccanismo dovrei essere in grado di andare avanti da solo (spero :lol: )

Come si può evincere dal nickname non sono esattamente una cima delle macro in Excel (o VBA). :oops:
L’ultima macro l’ho realizzata in Supercalc vent’anni fa ed oggi non riesco neanche a partire, pur avendo cercato nei forum ed avendo provato a riadattare altre soluzioni per casi solo simili a questo.
Purtroppo non riesco neanche a capire se il problema è di facile, media o difficile soluzione: se fosse troppo complesso temo mi dovrò rivolgere ad un professionista.

Grazie anticipato a coloro che potranno aiutarmi.
sono per la condivisione del sapere: il problema è che su questo forum il mio sapere è molto limitato...
superpippa
Utente Junior
 
Post: 12
Iscritto il: 19/07/11 16:59

Sponsor
 

Re: [EXCEL] macro per copiare valori da diversi files excel

Postdi raimea » 20/07/11 06:00

ciao
prova a leggere questa discussione :

http://www.pc-facile.com/forum/viewtopic.php?f=26&t=90580&p=526723&sid=7894769e84e42b2e8f37d0e0ae32e217#p526723

si parla di come prelevare piu dati dallo stesso file senza aprirlo 10 volte,
e riportarli in altro file....

per prelev. poi da altri file devi solo ripetere sotto, la stessa parte di macro ..

ciao
http://www.lelugarine.eu
S.O. Seven7, Excell 2010
Avatar utente
raimea
Utente Senior
 
Post: 1101
Iscritto il: 11/02/10 07:33
Località: lago

Re: [EXCEL] macro per copiare valori da diversi files excel

Postdi superpippa » 20/07/11 09:26

Grazie per il suggerimento.
Intanto ho visto che utilizzando il "Registratore di Macro" è piuttosto facile realizzare l'ossatura della macro stessa: le operazioni di copia e incolla sono immediate. Immagino che esistano metodi più snelli ma per ora mi accontento.
Il punto è che riesco a farlo solo manualmente: esiste un sistema - una volta ottimizzato il codice copia/incolla che esegue l'operazione sul file REPORT (1) - per far eseguire la stessa operazione sul file "successivo"? In alternativa devo copiare il codice e modificare manualmente il nome del file da aprire, ma suppongo esista un metodo automatico perchè se ho 4.000 files la vedo lunga :D :
E come dirgi di fermarsi quando arriva all'ultimo file (sapendo che il numero di files nella cartella è variabile di volta in volta)?
sono per la condivisione del sapere: il problema è che su questo forum il mio sapere è molto limitato...
superpippa
Utente Junior
 
Post: 12
Iscritto il: 19/07/11 16:59

Re: [EXCEL] macro per copiare valori da diversi files excel

Postdi Anthony47 » 20/07/11 16:24

Ciao superpippa, benvenuto nel forum.
Come detto in altro post: Per principio sono contrario a soluzioni chiavi in mano, che non aiutano l' utente se non nell' immediato; in questo caso faccio, per pigrizia, una eccezione.
Pertanto, partendo dal tuo file RIEPILOGO.xls:
-Alt F11 per aprire l' editor delle macro
-Menu /inserisci /Modulo
-copia questo codice e inseriscilo nel frame di dx del file
Codice: Seleziona tutto
Sub sprpp()
ChDir ("C:\REPORT")
  MyF = Dir("*.xls")
  If MyF = "" Then Exit Sub
  While MyF <> ""
    Call FImp(MyF)
    MyF = Dir
  Wend
End Sub

Sub FImp(NFile)
Workbooks.Open Filename:=NFile
Sheets("REPORT MESE").Activate
If Len(Replace(NFile, "(", "")) = Len(NFile) Then
    RNum = 0
    Else: RNum = Val(Mid(NFile, InStr(1, NFile, "(") + 1, InStr(1, NFile, ")") - InStr(1, NFile, "(") - 1))
End If
ThisWorkbook.Sheets("Foglio1").Cells(RNum + 1, "A") = Range("H2").Value '<<<
ThisWorkbook.Sheets("Foglio1").Cells(RNum + 1, "B") = Range("E4").Value '<<<
Workbooks(NFile).Close savechanges:=False
End Sub
Presuppone che riepilogo.xls abbia un Foglio1, e in questo foglio verranno riportati i dati provenienti dai vari report(x).xls; eventualmente modifica "Fogio1" nelle istruzioni marcate <<<, tenendo ben presente che il contenuto di quel foglio sara' alterato dalla macro.


Torna sul file excel, lancia la macro "sprpp" (Alt-F8, scegli " sprpp " dall' elenco che ti propone, premi Esegui) e vedi, l' effetto che fa.

E' opportuno che Foglio1 (o come avrai modificato) sia vuoto prima di lanciare la macro.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13892
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL] macro per copiare valori da diversi files excel

Postdi superpippa » 20/07/11 21:41

Ciao Anthony e grazie per l'aiuto (verificherò concretamente domani ed aggiornerò sui risultati).
In linea di principio sono d'accordo con te, contro le soluzioni "chiavi in mano" (che avevo già compreso leggendo le regole del forum. Nel caso specifico gli impegni lavorativi (che mi portano lontano da casa) e familiari (che mi portano lontano dal pc) davvero mi limitano ad un approccio sistematico della materia per mancanza di tempo.
Non sono un pigrone-paravento ;) e ti ringrazio nuovamente per la condivisione delle tue conoscenze.

Però - a livello educativo - ti assicuro che per me sarà più facile partire dal caso concreto e poi "studiare" il perchè ed il percome di ogni riga di codice: appunto per imparare in maniera un po' empirica.
Siano benedetti i forum di internet.
sono per la condivisione del sapere: il problema è che su questo forum il mio sapere è molto limitato...
superpippa
Utente Junior
 
Post: 12
Iscritto il: 19/07/11 16:59

Re: [EXCEL] macro per copiare valori da diversi files excel

Postdi Anthony47 » 22/07/11 00:07

Se hai domande siamo qua.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13892
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL] macro per copiare valori da diversi files excel

Postdi superpippa » 16/09/11 15:29

Rieccomi. Allora, la macro "sprpp" funziona egregiamente, sono riuscito ad adattarla ed aggiungere altre funzioni utili (salvataggio dei Report originali con altro nome; stampa di una selezione del foglio di lavoro; apertura del file Report per verifica tramite link nel foglio Riepilogo).
Tutto molto bello, peccato che proprio non sono riuscito a capire bene la sintassi (sono ancora molto ignorante).

Volevo infatti provare a bypassare una fase antecedente, più che altro stavo sperimentando.
Io ricevo 50 files .xls che poi rinomino REPORT.XLS... REPORT(N).XLS.
E' possibile ottenere lo stesso risultato della macro "sprpp" SENZA rinominarli ma semplicemente aprendo tutti i files uno alla volta (quale che sia il nome)?
I miei tentativi vanno tutti a vuoto.
Riesco ad aprire tutti i files uno alla volta (così ad esempio li mando tutti in stampa); riesco a copiare un valore; NON riesco a copiare questo valore su righe successive del foglio Riepilogo :(
sono per la condivisione del sapere: il problema è che su questo forum il mio sapere è molto limitato...
superpippa
Utente Junior
 
Post: 12
Iscritto il: 19/07/11 16:59

Re: [EXCEL] macro per copiare valori da diversi files excel

Postdi Anthony47 » 17/09/11 00:33

Se vuoi semplicemente scrivere le stesse informazioni in modo sequenziale su "Foglio1" del file in cui hai messo la macro, allora elimina le istruzioni comprese tra
If Len(Replace(NFile, "(", "")) = Len(NFile) Then ed End If (incluse queste due) e sostituisci con
Codice: Seleziona tutto
RNum = ThisWorkbook.Sheets("Foglio1").Cells(Rows.Count, "A").Row

Questo ti risparmiera' l' operazione di rinomina nel formato Report(N).xls

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13892
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL] macro per copiare valori da diversi files excel

Postdi superpippa » 18/09/11 00:18

Allora,
ho lasciato tutte le altre istruzioni, levando solo tutta la parte inclusa tra "If Len... End If"

lasciando pari pari tutte le altre istruzioni, mi carica i dati tutti sulla stessa riga (sovrascrivendoli).
In particolare li scrive nella riga 65337 :eeh: (infatti all'inizio pensavo non caricasse i dati, poi cerca cerca li ho trovati in fondo al foglio)

Codice: Seleziona tutto
Sub CARICA_DATI_DIRETTO()
ChDir ("C:\REPORT")
  MyF = Dir("*.xls")
  If MyF = "" Then Exit Sub
  While MyF <> ""
    Call Fimp(MyF)
    MyF = Dir
  Wend
End Sub

Sub Fimp(NFile)
Workbooks.Open Filename:=NFile
Sheets("REPORT").Activate
RNum = ThisWorkbook.Sheets("Foglio1").Cells(Rows.Count, "A").Row
ThisWorkbook.Sheets("Foglio1").Cells(RNum + 1, "A") = Range("Y2").Value '<<<
ThisWorkbook.Sheets("Foglio1").Cells(RNum + 1, "B") = Range("D2").Value '<<<

Workbooks(NFile).Close savechanges:=False
End Sub




Nb rispetto al progetto iniziale tutti i file dai quali carico i dati hanno un foglio chiamato "Report" (ex "Report Mese")
Ho postato solo la parte di codice rilevante, eliminando i passaggi delle righe che terminano con '<<< (con i quali carico ulteriori varie celle).

Ho fatto qualche tentativo.
Ho notato che se al posto di
Codice: Seleziona tutto
ThisWorkbook.Sheets("Foglio1").Cells(RNum + 1, "A") = Range("Y2").Value '<<<

metto ad esempio
Codice: Seleziona tutto
ThisWorkbook.Sheets("Foglio1").Cells(2, "A") = Range("Y2").Value '<<<

i dati vengono caricati nella seconda riga, proprio dove vorrei. Solo che sono tutti sovrascritti nella seconda riga: viceversa gli altri dati andrebbero copiati nella terza, quarta, ennesima riga del file "Riepilogo" .
Ogni mio tentativo di risolvere è stato per ora vano.
sono per la condivisione del sapere: il problema è che su questo forum il mio sapere è molto limitato...
superpippa
Utente Junior
 
Post: 12
Iscritto il: 19/07/11 16:59

Re: [EXCEL] macro per copiare valori da diversi files excel

Postdi Anthony47 » 18/09/11 00:45

Porta pazienza, e' proprio l' istruzione sbagliata: non RNum = ThisWorkbook.Sheets("Foglio1").Cells(Rows.Count, "A").Row ma
Codice: Seleziona tutto
RNum = ThisWorkbook.Sheets("Foglio1").Cells(Rows.Count, "A").End(xlup).Row

Riprova per favore.
Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13892
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL] macro per copiare valori da diversi files excel

Postdi superpippa » 18/09/11 01:11

Funziona perfettamente!
Devo dire che cercando soluzione a problema analogo mi sono imbattuto in km di codice astruso: questa soluzione è invece estremamente efficace e snella. Vado a scolpirla nel marmo (e cerco di capirne il funzionamento).
Saluti e grazie
sono per la condivisione del sapere: il problema è che su questo forum il mio sapere è molto limitato...
superpippa
Utente Junior
 
Post: 12
Iscritto il: 19/07/11 16:59

Re: [EXCEL] macro per copiare valori da diversi files excel

Postdi grazio » 02/11/15 17:17

Scusate ragazzi, mi servirebbe una macro simile a quella scritta da superpippa:
Ho diversi file (creati man mano) contenenti un budget mensile, uno per mese. Ciascun file ha un foglio chiamato "Storico" con il riepilogo dei mesi.
Ciascun file è chiamato aamm_Budget e continene il valore che mi interessa nella cella D14 del foglio Budget Mensile, mentre il riepilogo è nel foglio storico e voglio copiare D14 nelle celle G3, G4, G5, etc... rispettivamente per i file 1506, 1507, 1508, etc.

Immagine

Di seguito riporto il codice con alcuni commenti:
Codice: Seleziona tutto
Sub cmdaggiorna()

Dim i, ultimariga As Integer
Dim cartella, nomefile As String

ultimariga = WorksheetFunction.CountA(Range("F:F")) + 1 'Contatore che ho inserito poichè il numero di file aumenta (+1 file/mese)

cartella = "C:\Users\...\" 'Percorso dei file


For i = 1 + 2 To ultimariga 'Ciclo che in teoria riporta il valore di ciascun file
nomefile = cartella & Cells(i, 6) & "_Budget.xlsx" 'Nome del file di origine (l'ho testato con un MsgBox e funziona)
Workbooks.Open Filename:=nomefile
Sheets("Budget Mensile").Activate
ThisWorkbook.Sheets("Storico").Cells(i, 7) = Range("D14").Value
Workbooks(nomefile).Close savechanges:=False
Next

End Sub


Lanciando la macro, compare un Errore di runtime '9' - Indice non incluso nell'intervallo e viene copiato solo il valore della cella D14 proveniente dal primo file (1506), poi il ciclo si arresta. Inoltre non viene chiuso automaticamente il file 1506_Budget.
Ho testato il ciclo con una MsgBox e mi vengono restituiti tutti i nomi corretti dei file presenti in cartella, sino all'ultimo 1511. Avete idee del perchè non funzioni?

Grazie mille,
grazio
grazio
Newbie
 
Post: 3
Iscritto il: 02/11/15 17:02

Re: [EXCEL] macro per copiare valori da diversi files excel

Postdi grazio » 03/11/15 12:44

Ho cambiato un pochino il codice, togliendo il ciclo per semplificare le cose e capire dove sia l'errore.

Codice: Seleziona tutto
Sub cmdaggiorna()

Dim i, ultimariga, valore As Integer
Dim cartella, nomefile1, nomefile2, percorsofile1, percorsofile2 As String

ultimariga = WorksheetFunction.CountA(Range("F:F")) + 1 'Contatore che ho inserito poichè il numero di file aumenta (+1 file/mese)

cartella = "C:\Users\GRA\Documents\Carlo\" 'Percorso dei file

nomefile2 = Cells(ultimariga, 6) & "_Budget.xlsm"
percorsofile2 = cartella & nomefile2

valore = -1


i = 1 + 2

nomefile1 = Cells(i, 6) & "_Budget.xlsx"
percorsofile1 = cartella & nomefile1 'Nome del file di origine (l'ho testato con un MsgBox e funziona)

Cells(i, 14) = percorsofile1

Workbooks.Open (percorsofile1)
valore = Sheets("Budget Mensile").Range("D14").Value

MsgBox (valore)

'FIN QUI FUNZIONA, LA MsgBox RESTITUISCE IL VALORE CORRETTO

Workbooks(percorsofile2).Sheets("Storico").Range(Cells(i, 7)) = valore

Workbooks(percorsofile1).Close savechanges:=False

End Sub

Il problema è negli ultimi due comandi:
    - esce come sempre il messaggio errore di runtime 9 indice non incluso nell'intervallo
    - non chiude il file di origine
    - non copia valore nella cella di destinazione
Grazie in anticipo a chi saprà aiutarmi :idea:
grazio
Newbie
 
Post: 3
Iscritto il: 02/11/15 17:02

Re: [EXCEL] macro per copiare valori da diversi files excel

Postdi grazio » 03/11/15 13:09

EDIT - Risolto grazie!
grazio
Newbie
 
Post: 3
Iscritto il: 02/11/15 17:02

Re: [EXCEL] macro per copiare valori da diversi files excel

Postdi bismark » 03/11/15 13:59

Gentilissimo

Grazio

non sono un grande esperto di vba e sto cercando di imparare, inoltre mi interessano molto gli argomenti in cui si parla di budget

ho provato a ricostruire i file per testare la sub allegata e leggo con piacere che hai risolto

mi potresti aiutare, perché attraverso il tasto funzione F8 scorro la sub ma alla fine come dici tu mi blocco??

il primo mese di riferiemento è giugno ( 1506_budget) o mi sbaglio??

ma se la sub è in un file e la penultima riga fa riferimento ad c:\prova\1512_budget poi foglio storico riga 3 di colonna 7

non riesco a capire come può legarsi al dato 1506

help????
bismark
Utente Junior
 
Post: 54
Iscritto il: 08/07/15 15:03

Re: [EXCEL] macro per copiare valori da diversi files excel

Postdi bismark » 03/11/15 15:11

Annullare richiesta spiegazioni prima parte

ho inserito la sub con il ciclo e ho già capito qualcosa di più

grazie

adesso vado a verificare l'errore segnalato

Scusate ancora
bismark
Utente Junior
 
Post: 54
Iscritto il: 08/07/15 15:03

Re: [EXCEL] macro per copiare valori da diversi files excel

Postdi bismark » 03/11/15 15:17

risolto anch'io

ho creato un'altra riga di codice
nomefile2 = Cells(i, 6) & "_Budget.xlsx"

e quindi cambiato

Workbooks(nomefile).Close


con

Workbooks(nomefile2).Close

a qualcuno verranno i brividi

perdonatemi
bismark
Utente Junior
 
Post: 54
Iscritto il: 08/07/15 15:03

Re: [EXCEL] macro per copiare valori da diversi files excel

Postdi bismark » 03/11/15 15:22

:oops: Se le celle sono vuote ... :oops: :oops: :oops:

alla prossima
bismark
Utente Junior
 
Post: 54
Iscritto il: 08/07/15 15:03


Torna a Applicazioni Office Windows


Topic correlati a "[EXCEL] macro per copiare valori da diversi files excel":


Chi c’è in linea

Visitano il forum: Nessuno e 16 ospiti