Condividi:        

[EXCEL 2013] Unire più file excel in uno

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 2013] Unire più file excel in uno

Postdi josple » 19/01/15 15:23

Buongiorno a tutti! Sono nuovo del forum. Ho provato a cercare tra i vari topic qualcosa che potesse aiutarmi ma non sono riuscito a trovare nulla.
Spero di ricevere delle risposte per riuscire a risolvere un problema che cerco di superare da alcune settimane.

Ho vari files (centinaia) excel, ognuno dei quali contiene dati ed anche dei riquadri dove sono stati inseriti dei testi. I file sono formattati nella stessa maniera, cambiano solo i valori al loro interno.
Vorrei riunire i singoli files in un unico grande file così da avere, in uno stesso foglio di lavoro, il contenuto dei singoli files in successione.
Ho provato vari software che facessero in maniera automatizzata il merging dei file, ma i riquadri con i testi non vengono copiati e di conseguenza la copia non è integrale benchè le restanti porzioni del file vengono correttamente copiate e incollate.
Ho provato ad eseguire degli script VBA (che non so usare) presi da vari forum sulla rete, ma nessuno fa al caso mio o non funzionano come vorrei.

Sono riuscito a raggiungere il risultato sperato (in termini di qualità) solamente facendo un copia incolla manuale del contenuto dei singoli file, ma estenderlo a tutti sarebbe un lavoro troppo lungo.

Il mio obbiettivo sarebbe dunque quello di automatizzare il copia e incolla del contenuto selezionato dei singoli file in uno di destinazione.

Spero di essere stato sufficientemente chiaro e se qualcuno vorrà aiutarmi, allegherò una copia di un file sul quale dovrò lavorare.
Grazie a chiunque vorrà aiutarmi! :)
josple
Utente Junior
 
Post: 27
Iscritto il: 19/01/15 15:01

Sponsor
 

Re: [EXCEL 2013] Unire più file excel in uno

Postdi ricky53 » 19/01/15 16:14

Ciao,
benvenuto nel nostro forum.

a memoria l'argomento è stato tratto ... più tardi faccio una ricerca, riprovaci anche tu


Con il registratore di macro esegui l'operazione di apertura del file, la selezione dell'intervallo ed il copia/incolla ed allega il codice ottenuto.


Cosa intendi con "... dei riquadri dove sono stati inseriti dei testi" ?
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [EXCEL 2013] Unire più file excel in uno

Postdi ricky53 » 19/01/15 16:38

Ciao,
facendo una ricerca ho trovato questo codice
Codice: Seleziona tutto
Option Explicit
Option Compare Text

Public RR As Long, UR As Long, Inizio As Double
Public MioPercorso As String, MioFile As String, Nome_Precedente As String
Public Wb_In As Workbook, Ws_In As String, Wb_Out As Workbook, Ws_Out As String
Public Rng_In As Range, Rng_Out As Range

Sub Leggi_Dati_e_Copia_Intervallo_Dati()
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Application.AskToUpdateLinks = False
    Application.EnableEvents = False
   
    Inizio = Timer
    Nome_Precedente = ActiveWorkbook.Name
    Sheets("Foglio2").Select ' <<=== QUI devi scrivere il nome del foglio sul quale scrivere i vari dati

    Set Wb_Out = ActiveWorkbook
    Ws_Out = Wb_Out.ActiveSheet.Name
    RR = Wb_Out.Sheets(Ws_Out).Range("A" & Rows.Count).End(xlUp).Row
    If RR < 4 Then ' <<=== Riga di inizio per la copia dei dati
        RR = 4
    End If
    Range("A4:DA" & RR).Clear ' <<=== VENGONO CANCELLATI i DATI esistenti !!!

    MioPercorso = "D:\Temp\" ' <<===== QUI devi scrivere il tuo percorso
    MioFile = Dir(MioPercorso & "*.xls*")
    UR = 4: RR = 0
    Do While MioFile <> ""
        Workbooks.Open Filename:=MioPercorso & MioFile
       
        Sheets("Foglio1").Select ' <<==== QUI devi scrivere il nome del foglio dal quale copiare i dati
        Set Wb_In = ActiveWorkbook
        Ws_In = Wb_In.ActiveSheet.Name
        RR = Wb_In.Sheets(Ws_In).Range("A" & Rows.Count).End(xlUp).Row
        Set Rng_In = Wb_In.Sheets(Ws_In).Range("A4:DA" & RR)
        Set Rng_Out = Wb_Out.Sheets(Ws_Out).Range("A" & UR)
       
        Rng_In.Copy
        Wb_Out.Activate
        Rng_Out.Select
        ActiveSheet.Paste
        UR = Wb_Out.Sheets(Ws_Out).Range("A" & Rows.Count).End(xlUp).Row + 1
        Windows(MioFile).Close

        MioFile = Dir()
    Loop
   
   
    Set Wb_In = Nothing
    Set Wb_Out = Nothing
    Application.EnableEvents = True
    Application.DisplayAlerts = True
    Application.AskToUpdateLinks = True
   
    Range("A4").Select
    Application.ScreenUpdating = True
    MsgBox "Elaborazione Effettuata in  " & Format(Timer - Inizio, "0.000") & "  secondi"
End Sub


Ho inserito dei commenti per facilitarne la comprensione ... va adattato alla tua esigenza
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [EXCEL 2013] Unire più file excel in uno

Postdi josple » 19/01/15 16:45

Ciao! Grazie per la risposta!

Premetto che sono un utente alle prime armi con excel. Sono uno studente alle prese con la tesi e questo lavoro è funzionale a questo obbiettivo. Non ho mai creato una macro e pertanto non saprei come allegare il codice ottenuto. Spero la cosa non sia di impedimento. Con un minimo di guida e di istruzioni però riuscirò ad allegare tutto quello che è necessario.
I riquadri di cui parlo dovrebbero essere della shapes dove sono inseriti dei testi.
Forse però è meglio allegare un file esemplificativo della struttura del foglio.

L'idea di base è quella di automatizzare il copia e incolla del contenuto dei singoli files raggruppati in una cartella di origine, in un unico file di destinazione che abbia al suo interno un unico foglio con tutti i dati in sequenza.
Conto nel vostro aiuto
josple
Utente Junior
 
Post: 27
Iscritto il: 19/01/15 15:01

Re: [EXCEL 2013] Unire più file excel in uno

Postdi josple » 19/01/15 16:50

ricky53 ha scritto:Ciao,
facendo una ricerca ho trovato questo codice
Codice: Seleziona tutto
Option Explicit
Option Compare Text

Public RR As Long, UR As Long, Inizio As Double
Public MioPercorso As String, MioFile As String, Nome_Precedente As String
Public Wb_In As Workbook, Ws_In As String, Wb_Out As Workbook, Ws_Out As String
Public Rng_In As Range, Rng_Out As Range

Sub Leggi_Dati_e_Copia_Intervallo_Dati()
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Application.AskToUpdateLinks = False
    Application.EnableEvents = False
   
    Inizio = Timer
    Nome_Precedente = ActiveWorkbook.Name
    Sheets("Foglio2").Select ' <<=== QUI devi scrivere il nome del foglio sul quale scrivere i vari dati

    Set Wb_Out = ActiveWorkbook
    Ws_Out = Wb_Out.ActiveSheet.Name
    RR = Wb_Out.Sheets(Ws_Out).Range("A" & Rows.Count).End(xlUp).Row
    If RR < 4 Then ' <<=== Riga di inizio per la copia dei dati
        RR = 4
    End If
    Range("A4:DA" & RR).Clear ' <<=== VENGONO CANCELLATI i DATI esistenti !!!

    MioPercorso = "D:\Temp\" ' <<===== QUI devi scrivere il tuo percorso
    MioFile = Dir(MioPercorso & "*.xls*")
    UR = 4: RR = 0
    Do While MioFile <> ""
        Workbooks.Open Filename:=MioPercorso & MioFile
       
        Sheets("Foglio1").Select ' <<==== QUI devi scrivere il nome del foglio dal quale copiare i dati
        Set Wb_In = ActiveWorkbook
        Ws_In = Wb_In.ActiveSheet.Name
        RR = Wb_In.Sheets(Ws_In).Range("A" & Rows.Count).End(xlUp).Row
        Set Rng_In = Wb_In.Sheets(Ws_In).Range("A4:DA" & RR)
        Set Rng_Out = Wb_Out.Sheets(Ws_Out).Range("A" & UR)
       
        Rng_In.Copy
        Wb_Out.Activate
        Rng_Out.Select
        ActiveSheet.Paste
        UR = Wb_Out.Sheets(Ws_Out).Range("A" & Rows.Count).End(xlUp).Row + 1
        Windows(MioFile).Close

        MioFile = Dir()
    Loop
   
   
    Set Wb_In = Nothing
    Set Wb_Out = Nothing
    Application.EnableEvents = True
    Application.DisplayAlerts = True
    Application.AskToUpdateLinks = True
   
    Range("A4").Select
    Application.ScreenUpdating = True
    MsgBox "Elaborazione Effettuata in  " & Format(Timer - Inizio, "0.000") & "  secondi"
End Sub


Ho inserito dei commenti per facilitarne la comprensione ... va adattato alla tua esigenza


Saresti così gentile da indicarmi cosa dovrei modificare? Purtroppo non so usare VBA e non sono sicuro di cosa inserire all'interno per modificare il tutto secondo le mie esigenze
josple
Utente Junior
 
Post: 27
Iscritto il: 19/01/15 15:01

Re: [EXCEL 2013] Unire più file excel in uno

Postdi Flash30005 » 19/01/15 16:57

Vedo che c'è già una soluzione mentre stavo editando la macro (bozza)

che prevede
1) l'importazione dei dati del "Foglio1" di tutti i file Excel contenuti nella stessa cartella del file Riepilogo (che contiene la macro
2) crea una cartella ArchivioXls (se non esiste)
3) trasferisce i file processati nella cartella Archivio per evitare di processarli di nuovo

Codice: Seleziona tutto
Public perc As String, Ws1 As String, f As String, WB1 As String
Sub ElencoFileXls()
Application.ScreenUpdating = False
Application.Calculation = xlManual
perc = ThisWorkbook.Path
If Dir(perc & "\ArchivioXls", vbDirectory) = "" Then
    MkDir (perc & "\ArchivioXls")
End If
WB1 = ThisWorkbook.Name
Ws1 = "Foglio1"
Worksheets(Ws1).Select
Range("A1").Select
  ElencoFile Direct:=perc, Estens:="*.xls*", Inicell:=ActiveCell
    Columns("A:AZ").EntireColumn.AutoFit
    Range("A1").Select
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
Sub ElencoFile(Direct As String, Estens As String, Inicell As Range)
  Dim i As Integer, f As String
  ChDir Direct
  f = Dir(Estens)
  If f = "" Then Exit Sub
  While f <> ""
    If f <> ThisWorkbook.Name Then
        Application.Workbooks.Open perc & "\" & f
        URF = Workbooks(f).Worksheets("Foglio1").Range("A" & Rows.Count).End(xlUp).Row
        URR = Workbooks(WB1).Worksheets(Ws1).Range("A" & Rows.Count).End(xlUp).Row
        Workbooks(f).ActiveSheet.Rows("1:" & URF).Copy Destination:=Workbooks(WB1).Worksheets(Ws1).Range("A" & URR + 1)
        Workbooks(f).Close savechanges:=False
        FileCopy perc & "\" & f, perc & "\ArchivioXls\" & f
            Kill perc & "\" & f
    End If
    f = Dir
  Wend
End Sub


Ciao

N.B. il foglio di destinazione è stato chiamato "Foglio1" come tutti i fogli origine dati, se diverso cambiare il nome del foglio nella macro dove vedi scritto: "Foglio1"

Inoltre bisogna vedere se ci sono delle testate da eliminare nel file riepilogo ma lo approfondiamo in un secondo momento
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [EXCEL 2013] Unire più file excel in uno

Postdi ricky53 » 19/01/15 17:00

Ciao,
Uhm, Uhm.

Senza una conoscenza, anche minima del VBA la vedo dura.

Per la tua tesi ti occorre far visionare anche il codice (una volta che lo si sarà prodotto e che funzionerà) che utilizzerai per unire i file?
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [EXCEL 2013] Unire più file excel in uno

Postdi josple » 19/01/15 17:11

No, assolutamente. A me serve solo avere i dati accorpati in un unico file. Questo renderà più agevole il lavoro successivo.
Io ho questi file contenuti in C:\Users\Utente\Desktop\Esami Eco
L'area che vorrei poter copiare si trova nel foglio 1 e si estende da A1 a J80

Mi rendo perfettamente conto di come sia difficile relazionarsi con un utente così "scarso" in materia, ma se vi fornissi questi dati, potreste modificare voi lo script per me? Magari solo per la prima volta, per andare a vedere, rispetto al modello "standard", quali sono i parametri che devo modificcare e con quale sintassi.
josple
Utente Junior
 
Post: 27
Iscritto il: 19/01/15 15:01

Re: [EXCEL 2013] Unire più file excel in uno

Postdi Flash30005 » 19/01/15 17:16

Se fai queste domande significa che non hai provato la macro da me postata perché non ha importanza quante righe o colonne tu debba copiare quindi sia se il range è A1:J80 o A1:ZZ100000 non ha importanza
e, inoltre, non ha importanza dove hai il tuo file (la macro "legge" il percorso e userà quello del file)

quindi non c'è nulla da modificare

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [EXCEL 2013] Unire più file excel in uno

Postdi josple » 19/01/15 17:17

L'ho provata ma esce fuori : errore run time 76, impossibile trovare il percorso
josple
Utente Junior
 
Post: 27
Iscritto il: 19/01/15 15:01

Re: [EXCEL 2013] Unire più file excel in uno

Postdi Flash30005 » 19/01/15 17:24

Allora è bene non lasciare spazi nei nomi cartella
quindi
C:\Users\Utente\Desktop\Esami Eco
modifica così
C:\Users\Utente\Desktop\Esami_Eco (con underscore o elimina lo spazio)
all'interno di questa cartella dovrai mettere sia il file Riepilogo e tutti i file xls con i dati

lancia la macro "ElencoFileXls"

e fornisci informazioni su quanto succede e la riga di debug nella quale si blocca

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [EXCEL 2013] Unire più file excel in uno

Postdi josple » 19/01/15 17:44

Sei stato gentilissimo!
Il codice ha funzionato, ma ci sono delle imperfezioni. Non viene copiata l'ultima porzione del foglio di lavoro. Nello specifico le righe da 71 ad 80
josple
Utente Junior
 
Post: 27
Iscritto il: 19/01/15 15:01

Re: [EXCEL 2013] Unire più file excel in uno

Postdi Flash30005 » 19/01/15 17:56

il programma prevede il conteggio numero righe riferendosi alla colonna A con questi codici
URF = Workbooks(f).Worksheets("Foglio1").Range("A" & Rows.Count).End(xlUp).Row (colonna A per il file Dati)
URR = Workbooks(WB1).Worksheets(Ws1).Range("A" & Rows.Count).End(xlUp).Row (colonna A per il file Riepilogo)

Controlla che questa colonna (A) sia popolata fino all'ultima riga altrimenti indica quale è la colonna che sicuramente arriva all'ultima riga oppure cambia tu stesso la lettera colonna nelle due righe codice che ti ho riportato
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [EXCEL 2013] Unire più file excel in uno

Postdi josple » 19/01/15 18:23

Grazie mille! Ho modificato i codici come mi hai suggerito. Adesso la copia è perfetta. Ci sono alcune celle dove i valori vengono sostituiti da #, ma credo sia un problema insito al file sorgente piuttosto che al comando copia (almeno credo)
Ad ogni modo sei stato davvero molto gentile! Grazie mille!
josple
Utente Junior
 
Post: 27
Iscritto il: 19/01/15 15:01

Re: [EXCEL 2013] Unire più file excel in uno

Postdi Flash30005 » 19/01/15 18:35

se vedi il simbolo # significa che la colonna è più stretta del valore o stringa contenuta nella cella
puoi selezionare tutte le colonne interessate (da A a J) e applicare la larghezza automatica posizionandoti tra una colonna e l'altra (dove ci sono le lettere delle colonne) fino a che il cursore non mostri una doppia freccia (a destra e a sinistra) e cliccare due volte

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [EXCEL 2013] Unire più file excel in uno

Postdi josple » 19/01/15 19:24

Bene, meglio ancora! Già che ci siamo, ci sono alcune celle che contengono questo simbolo #DIV/0!
E' possibile in qualche modo superare anche questo piccolo problemino?
josple
Utente Junior
 
Post: 27
Iscritto il: 19/01/15 15:01

Re: [EXCEL 2013] Unire più file excel in uno

Postdi ricky53 » 19/01/15 21:00

Ciao,
vuol dire che nella cella c'è una formula con una divisione ed il denominatore è uguale zero.
Che formula c'è in una della celle con il valore #DIV/0!
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [EXCEL 2013] Unire più file excel in uno

Postdi enrico43 » 20/01/15 21:45

Buonasera, l'ultima macro funziona anche sul mio excel 2003, sballa solo la larghezza delle colonne. Vorrei però che non mi copiasse le prime 4 righe (intestazioni di colonna) e, se possibile, anche i pulsanti che lanciano le macro sempre posizionati nella seconda riga di ogni file.
Avrei un altro piccolo problema da risolvere con macro, cioè, una volta accodati tutti i file (per ora ho fatto una prova solo con 2 ed ho fatto in tempo a prendere la prima medicina.....ne devo incolonnare 57!!), dovrei ordinarli in funzione di una parola (sempre APP. più un numero) che si trova sempre sulla colonna A ed è in grassetto. Ed avere un allarme quando stanno per essere occupate le 65000 righe del 2003.
Se richiesto posso aprire un nuovo 3d.
Saluti
Enrico

OT Caro Flash, temo che la tua insonnia questa sera mi sarà d'aiuto, domani devo consegnare il lavoro e questa richiesta è solo l'inizio.
enrico43
Utente Senior
 
Post: 208
Iscritto il: 13/09/14 15:33
Località: Fiumicino

Re: [EXCEL 2013] Unire più file excel in uno

Postdi Flash30005 » 21/01/15 01:23

Quindi devi copiare dalla 5ª riga in poi di ogni file, giusto?
Per ordinarli si può effettuare un ordinamento alfabetico/numerico ma secondo APP cosa significa?
Se al posto di dare l'allarme che, sinceramente non risolve il problema perché blocca il processo non è meglio riportare il rimanente nel secondo foglio (foglio2) di riepilogo?
fai sapere
ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [EXCEL 2013] Unire più file excel in uno

Postdi enrico43 » 21/01/15 06:45

Ciao Flash, sempre grazie della tua cortesia ed interessamento. Giusta il tuo proverbio in firma, avevo già risolto, sia la linea di partenza/arrivo che il salto al secondo foglio in caso la copia superasse le righe disponibili. Devo dirti però che la seconda macro, con un numero di file >15 mi si inchiodava con il messaggio "Errore di run-time 1004 - Troppi formati di celle diversi" con il debug giallo in
"Workbooks(f).ActiveSheet.Rows("4:" & URF).Copy Destination:=Workbooks(WB1).Worksheets(Ws1).Range("A" & URR + 1)", sicuramente dovuto al 2003 ed all'età del mio portatile, quindi ho provato la prima macro ovviamente adattata e pare che funzioni. Ier sera l'ho lanciata e + tardi in ufficio controllo.
Ti allego un file invece per farti vedere come sono strutturati: l'APP (Appendice) si trova in tutti sempre sulla colonna A, però con numerazione che varia, da APP.1-..... a APP.25.3 - ....., che dovrei ordinare, sempre sul file generato dalla macro. Come vedi da APP ad APP il numero di righe varia, può essere di 50 come di 2000 e non sono riuscito neppure a pensare di come risolvere. Pensavo di sfruttare la riga blu, poi di spostare/copiare sulla destra (a distanza opportuna) ed incolonnare tutti quelli con APP... uguale, poi .... sono andato a dormire.
http://www.filedropper.com/esempio_1
Cordiali saluti
Enrico
enrico43
Utente Senior
 
Post: 208
Iscritto il: 13/09/14 15:33
Località: Fiumicino

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "[EXCEL 2013] Unire più file excel in uno":


Chi c’è in linea

Visitano il forum: Nessuno e 87 ospiti