Condividi:        

unione più file 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

unione più file excel

Postdi lililili » 14/05/11 20:44

ciao
ho una ventina di fogli excel (di un unico file) che vorrei unire in un unico "database", il formato è lo stesso per le colonne, cambia solo il numero di righe. C'e una macro veloce per poterlo fare? male che vada...copia incolla di tutti i dati ma credo ci sia un modo più veloce :).
ciao e grazie
lililili
Utente Junior
 
Post: 15
Iscritto il: 03/02/11 09:06

Sponsor
 

Re: unione più file excel

Postdi Avatar3 » 14/05/11 23:18

Al file che contiene i 20 o più fogli
crea un nuovo foglio nominandolo "Database"
Inserisci in un modulo questa macro
Codice: Seleziona tutto
Sub Unisci()
Dim WsF As Worksheet
Application.ScreenUpdating = False
For F = 1 To Worksheets.Count
    If Sheets(F).Name <> "Database" Then
        Col = Sheets(F).Range("A1").CurrentRegion.Columns.Count
        Urf = Sheets(F).Range("A" & Rows.Count).End(xlUp).Row
        UR1 = Sheets("Database").Range("A" & Rows.Count).End(xlUp).Row + 1
        Set WsF = Worksheets(Sheets(F).Name)
        WsF.Select
        WsF.Range(Cells(1, 1), Cells(Urf, Col)).Copy Destination:=Sheets("Database").Range("A" & UR1)
    End If
Next F
Worksheets("Database").Select
Application.ScreenUpdating = True
End Sub


Avviala
alla fine otterrai tutte le colonne sul foglio Database
Se vuoi pioi eliminare i 20 fogli lasciando solo il riepilogo (Foglio Database)
Ciao
Per il funzionamento delle macro si deve impostare la protezione a Bassa o Media.
Menu Strumenti -> Macro -> Protezione...
Avatar utente
Avatar3
Utente Senior
 
Post: 569
Iscritto il: 04/04/11 09:04

Re: unione più file excel

Postdi ricky53 » 15/05/11 00:35

Ciao Avatar,
se posso permettermi manca il riferimento al foglio di appartenenza nell'istruzione
Codice: Seleziona tutto
WsF.Range(Cells(1, 1), Cells(Urf, Col)).Copy Destination:=Sheets("Database").Range("A" & UR1)

inserito il riferimenro diventa
Codice: Seleziona tutto
WsF.Range(WsF.Cells(1, 1), WsF.Cells(Urf, Col)).Copy Destination:=Sheets("Database").Range("A" & UR1)

e non occorre più la [codeWsF.Select][/code]


quindi il codice completo sarà
Codice: Seleziona tutto
Sub Unisci()
    Dim WsF As Worksheet
    Application.ScreenUpdating = False
    For F = 1 To Worksheets.Count
        If Sheets(F).Name <> "Database" Then
            Col = Sheets(F).Range("A1").CurrentRegion.Columns.Count
            Urf = Sheets(F).Range("A" & Rows.Count).End(xlUp).Row
            UR1 = Sheets("Database").Range("A" & Rows.Count).End(xlUp).Row + 1
            Set WsF = Worksheets(Sheets(F).Name)
' TOLTE
'            WsF.Select
'            WsF.Range(Cells(1, 1), Cells(Urf, Col)).Copy Destination:=Sheets("Database").Range("A" & UR1)
'...............

' AGGIUNTA
            WsF.Range(WsF.Cells(1, 1), WsF.Cells(Urf, Col)).Copy Destination:=Sheets("Database").Range("A" & UR1)
'...............
        End If
    Next F
    Worksheets("Database").Select
    Application.ScreenUpdating = True
End Sub




Se propio vogliamo fare un momento di didattica (senza voler essere il primo della classe ma solo un utente cui piace diffondere la conoscenza) io avrei scritto il codice in questo modo
Codice: Seleziona tutto
Sub Unisci_Più_Fogli_dello_Stesso_File()
    Dim WsF As Worksheet, WsOut As Worksheet
    Dim Col As Integer, Urf As Long, Ur1 As Long
    Application.ScreenUpdating = False
   
    Set WsOut = Sheets("Database")
    WsOut.Cells.ClearContents
    For F = 1 To Worksheets.Count
        Set WsF = Worksheets(Sheets(F).Name)
        If WsF.Name <> WsOut.Name Then
            Col = WsF.Range("A1").CurrentRegion.Columns.Count
            Urf = WsF.Range("A" & Rows.Count).End(xlUp).Row
            Ur1 = WsOut.Range("A" & Rows.Count).End(xlUp).Row + 1
            WsF.Range(WsF.Cells(1, 1), WsF.Cells(Urf, Col)).Copy _
                Destination:=WsOut.Range("A" & Ur1)
        End If
    Next F
    WsOut.Select
    Application.ScreenUpdating = True
    Set WsF = Nothing: Set WsOut = Nothing
End Sub
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: unione più file excel

Postdi lililili » 16/05/11 16:06

ciao ragazzi ci dev'essere un problemino...nel nuovo foglio viene riportata solo la prima colonna di ogni foglio e non tutte le colonne.
cosa si può fare?
ciao e grazie
lililili
Utente Junior
 
Post: 15
Iscritto il: 03/02/11 09:06

Re: unione più file excel

Postdi ricky53 » 16/05/11 16:29

Ciao,
puoi inviare il codice che hai effettivamente utilizzato ed allegare un'immagine con uno stralcio dei tuoi dati.

Prova ad eseguire la macro con "F8" e verifica le variabili che valori assumono (in particolare "Col") ad ogni "F8" che premi.
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: unione più file excel

Postdi Avatar3 » 16/05/11 17:21

Nelle macro inviate, non conoscevamo quante colonne dovevano essere copiate quindi abbiamo utilizzato
questo codice
Codice: Seleziona tutto
 Col = Sheets(F).Range("A1").CurrentRegion.Columns.Count

Ma tu hai specificato che tutti i fogli hanno lo stesso numero di colonne quindi non devi far altro che contarle e sostituire quella riga con il numero di colonne a te utili
Codice: Seleziona tutto
 Col = IlTuoNumeroColonne


Ciao
Per il funzionamento delle macro si deve impostare la protezione a Bassa o Media.
Menu Strumenti -> Macro -> Protezione...
Avatar utente
Avatar3
Utente Senior
 
Post: 569
Iscritto il: 04/04/11 09:04

Re: unione più file excel

Postdi lililili » 16/05/11 20:52

ragazzi siete troppo bravi!!!!
e se volessi far copiare dalla riga 16 e non dalla 1?
grazie mille!!!
lililili
Utente Junior
 
Post: 15
Iscritto il: 03/02/11 09:06

Re: unione più file excel

Postdi Avatar3 » 16/05/11 22:09

devi solo cambiare il numero di riga in questo codice (mi riferisco alla macro del prof. Ricky che ha corretto la sintattica della mia macro) :D

da così originale:
Codice: Seleziona tutto
           WsF.Range(WsF.Cells(1, 1), WsF.Cells(Urf, Col)).Copy _
                Destination:=WsOut.Range("A" & Ur1

a così (riga 16)
Codice: Seleziona tutto
           WsF.Range(WsF.Cells(16, 1), WsF.Cells(Urf, Col)).Copy _
                Destination:=WsOut.Range("A" & Ur1

Quindi devi cambiare solo il numero 1 a 16 in WsF.Range(WsF.Cells(.. dove il primo valore è la riga e, dopo la virgola, è il numero di colonna che lascerai a 1 (= a colonna "A")

Ciao
Per il funzionamento delle macro si deve impostare la protezione a Bassa o Media.
Menu Strumenti -> Macro -> Protezione...
Avatar utente
Avatar3
Utente Senior
 
Post: 569
Iscritto il: 04/04/11 09:04

Re: unione più file excel

Postdi ricky53 » 16/05/11 22:42

Ciao lilili,
bene per aver risolto.

Io però, al tuo posto, approfondirei il motivo per il quale l'istruzione
Codice: Seleziona tutto
Col = Sheets(F).Range("A1").CurrentRegion.Columns.Count
non riesce ad individuare la colonna esatta.

I dati iniziano, per tutte le colonne, dalla riga "1" ----> secondo me no. E questo può essere il otivo dell'anomalia che hai segnalato


Una macro deve essere "generalizzata il massimo possibile".
Se un domani tu aggiungessi delle colonne saresti costretto a modifcare l'istruzione
Codice: Seleziona tutto
Col = Numero Colonne
e questo non è una cosa consigliabile: il codicei va modifcato ilmeno possibile.


Avatar: però anche tu non te la cavi male in fatto di spiegazioni.
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: unione più file excel

Postdi ipsoware » 03/06/13 16:22

lililili ha scritto:ciao
ho una ventina di fogli excel (di un unico file) che vorrei unire in un unico "database", il formato è lo stesso per le colonne, cambia solo il numero di righe. C'e una macro veloce per poterlo fare? male che vada...copia incolla di tutti i dati ma credo ci sia un modo più veloce :).
ciao e grazie


Anch'io ho un problema simile a lililili
Ho sette file csv che hanno la stessa formattazione che vorrei unire.
Logicamente le intestazioni dei vari file file man mano che vengono accodati al primo devono essere eliminate.
Vi allego i file da accodare.http://www.ecartucce.it/cat.zip
I file da unire sono:
1.csv
2.csv
3.csv
....etc etc
Mentre il file generato dall'unione dei 7 file si dovrebbe chiamare Cat.csv
C'è qualcuno che mi può aiutare?

Grazie :undecided:
ipsoware
Utente Junior
 
Post: 40
Iscritto il: 01/05/13 07:25
Località: Viterbo

Re: unione più file excel

Postdi Anthony47 » 03/06/13 21:46

Hai provato le soluzioni che funzionarono per lililili?

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

Re: unione più file excel

Postdi ipsoware » 04/06/13 09:27

Si ho provato ma non sono riuscito a personalizzarla sulla base delle mie esigenze.
Dove devo specificare quali sono i file? E quali altre personalizzazioni devo fare?
Grazie
ipsoware
Utente Junior
 
Post: 40
Iscritto il: 01/05/13 07:25
Località: Viterbo

Re: unione più file excel

Postdi ricky53 » 04/06/13 12:23

Ciao,
puoi inviare quanto hai provato a fare in modo da poterti aiutare.
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: unione più file excel

Postdi ipsoware » 04/06/13 13:25

Sub Unisci_Più_Fogli_dello_Stesso_File()
Dim WsF As Worksheet, WsOut As Worksheet
Dim Col As Integer, Urf As Long, Ur1 As Long
Application.ScreenUpdating = False

Set WsOut = Sheets("Database")
WsOut.Cells.ClearContents
For F = 1 To Worksheets.Count
Set WsF = Worksheets(Sheets(F).Name)
If WsF.Name <> WsOut.Name Then
Col = 10
Urf = WsF.Range("A" & Rows.Count).End(xlUp).Row
Ur1 = WsOut.Range("A" & Rows.Count).End(xlUp).Row + 1
WsF.Range(WsF.Cells(1, 1), WsF.Cells(Urf, Col)).Copy _
Destination:=WsOut.Range("A" & Ur1)
End If
Next F
WsOut.Select
Application.ScreenUpdating = True
Set WsF = Nothing: Set WsOut = Nothing
End Sub
ipsoware
Utente Junior
 
Post: 40
Iscritto il: 01/05/13 07:25
Località: Viterbo

Re: unione più file excel

Postdi ricky53 » 04/06/13 14:22

Ciao,
tu hai inserito la macro che avevo scritto io mo non hai riportato le tue personalizzazioni che avevi iniziato a fare !

Devi dirci anche quali sono le colonne da copiare.
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: unione più file excel

Postdi Anthony47 » 05/06/13 13:16

Il problema di lililili era di unire piu' fogli di un unico file; quindi il primo problema da risolvere e' portare i 7 file su un unico foglio.
Trattandosi di nomi file fissi non avrai difficolta' a registrare una macro mentre esegui "l' importazione" (non Apertura) dei 7 file csv in 7 fogli diversi di un tuo file "master".
POI devi adattare la macro di lililili.

Ma secondo me tu stai continuando "qui" l' altra discussione (vedi viewtopic.php?f=26&t=91865&start=20#p571068); se la mia ipotesi e' vera allora lascia stare questa discussione (che poco ha ache vedere col tuo obiettivo) e continua la precedente discussione.
Ricorderai tra l' altro che Flash ti aveva gia' proposto una macro che lavorava su piu' file, quindi probabilmente li hai gia' un punto di partenza.

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

Re: unione più file excel

Postdi ipsoware » 06/06/13 19:05

Questa discussione mi interessa perchè la precedente fa parte di una fase successiva a questo lavoro cioè l'elaborazione di un file cat.csv trasformato in output_7.csv secondo dei parametri ben stabiliti.
Praticamente questa mi serve per non ripetere n° volte la procedura di compilazione del file output_7.csv che funziona perfettamente.
Ecco perchè mi servirebbe di trasformare i 7 file 1.csv , 2.csv etc etc in un unico file chiamato cat.csv logicamente non devo importare le intestazioni di tutti i file.
Ho provato a registrare una macro per l'importazione dei file e funziona ma il problema è che importa anche le intestazioni e quindi ogni volta dovrei andare ad eliminarle manualmente, probabilmente non sono stato capace io.
La soluzione migliore sarebbe quella di lanciare una macro da un file chiamato cat.csv che va ad importare i suddetti 7 file senza le intestazioni.
Il processo è questo:
I 7 file di partenza hanno tutti la stessa intestazione 1,2,3,4,5,6,7.csv --->cat.csv--->Output_7.csv
L'ultima fase è già funzionante mi serve solo il primo passaggio.

Spero di averti spiegato il problema.

Grazie
ipsoware
Utente Junior
 
Post: 40
Iscritto il: 01/05/13 07:25
Località: Viterbo

Re: unione più file excel

Postdi Anthony47 » 07/06/13 00:02

Tu vuoi da 7 file produrre un unico Output_7, cosa che puo' fare l' altra macro ripetendo per 7 volte il ciclo di importazione e rimappatura su Output_7, con 6-7 righe aggiuntive di codice (per gli altri visitatori, parlo di questa discussione: viewtopic.php?f=26&t=91865&start=40#p571153)
Comunque rimanendo su quanto suggerito in "questa" discussione: quando "importi" i file puoi decidere da quale riga importare (la scelta si fa nello step 1 di 3); ecco, sul file 1.csv sceglierai riga 1, mentre su tutti gli altri sceglierai riga 2. Questo ti metterea' una unica intestazione nel foglio di uscita.

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

Re: unione più file excel

Postdi giudar » 23/09/15 14:57

Ciao a tutti,
ho trovato interessantissimo l'articolo che ha risolto un problema che avevo dovendo unire più fogli excell in uno unico.
Adesso mi ponevo il problema di come fare a marcare le righe ottenute con l'indicazione del foglio originale.
Provo a spiegarmi meglio, detto che ho i fogli PIPPO, PLUTO e PAPERINO contenenti colonne dalla A alla J, vorrei che nel foglio unione alla colonna K venisse riportato il nome del foglio da cui questa riga è stata letta.

Qualcuno saprebbe indicarmi come fare?

Grazie
giudar
Newbie
 
Post: 2
Iscritto il: 23/09/15 14:54

Re: unione più file excel

Postdi bismark » 23/09/15 16:55

Buona sera

potrebbe aggiungere prima di END IF

Worksheets("Database").Range("k" & Ur1) = WsF.Name

sicuramente i più esperti potranno darle una soluzione migliore anche perchè questa scrive il nome del file di proveninza solo nella prima riga copiata e non in tutte

dipende molto dalla necessità / o dalla miglio soluzione propost dagli esperti informatici del forum

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

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "unione più file excel":


Chi c’è in linea

Visitano il forum: Nessuno e 50 ospiti

cron