Condividi:        

Collegare fogli di lavoro in 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

Collegare fogli di lavoro in Excel

Postdi disseria » 01/12/10 16:30

Buonasera a tutti,

chiedo a voi per risolvere questo problema.
Ho 12 file excel, uno per ogni mese, estratti da un tool. Questi file però non hanno lo stesso numero di colonne (in media si arriva fino a EA), nel senso che hanno in comune più o meno il 90% di queste. Per le righe invece il numero è molto più variabile, infatti possono essere 2000 cosi come 7000, ma non rappresenta un grosso problema.

Il problema principale è proprio quello delle colonne. Vorrei creare un unico foglio che comprenda tutti e 12 i file, ovviamente matchando le colonne uguali, mentre per le colonne diverse la soluzione potrebbe essere lasciare le celle vuote per quei file in cui la colonna manca.

Come posso procedere?
Manualmente rischio di, oltre a perderci la vista, anche di metterci molto ma molto tempo. Una macro??? Passo da access e le faccio matchare a lui??? oppure c'è un altro modo più semplice???

Grazie a chi saprà aiutarmi e scusate il disturbo.
disseria
Newbie
 
Post: 5
Iscritto il: 30/11/10 12:06

Sponsor
 

Re: Collegare fogli di lavoro in Excel

Postdi ricky53 » 01/12/10 18:04

Ciao,
prima di tutto benvenuto nel forum e ... nessun disturbo !!!

Puoi inviare per tre file:
1. le colonne presenti in ognuno dei file
2. la relativa intestazione (per poterle associare)

e proviamo a scrivere una macro che riunisca tutti e tre i file.

Lo spesso procedimento si applicherà ai restanti nove file.

Il numero di righe, ovviamente, non è rilevante.
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: Collegare fogli di lavoro in Excel

Postdi disseria » 01/12/10 19:43

Ti ringrazio del benvenuto e della tempestività della risposta!

Mi verrebbe un pò difficile inviare le intestazioni delle colonne, dato che sono un bel pò...è così indispensabile??? non si potrebbero inventare al momento, così poi quando vado ad applicare la macro cambio io il nome??

Per il numero te lo dico subito invece:
-1° file >>> 126 colonne (fino a DV per intenderci);
-2° file >>> 121 (fino a DQ);
-3° file >>> 121 (sempre fino a DQ).

In questo caso due su tre sono uguali, ma, come dicevo sopra, non è sempre cosi...
disseria
Newbie
 
Post: 5
Iscritto il: 30/11/10 12:06

Re: Collegare fogli di lavoro in Excel

Postdi ricky53 » 01/12/10 23:40

Ciao,
io vedo una operazione semi-automatica.

Occorre “normalizzare”, ossia rendere i 12 file tutti con gli stessi dati nelle stesse colone e poi copiare: OVVIO DIRAI !!!

1. devi vedere la corrispondenza delle intestazioni di colonna per ognuno dei 12 file, non penso che le colonne siano molto diverse da un file all'altro (già non ha senso che tra un mese e l'altro ci siano colonne diverse)
2. parti da gennaio e lo confronti con febbraio, crei il foglio “ANNO” con la struttura colonne che sia l’unione di gennaio e febbraio (partendo dall’ultima colonna ed inserendo le colonne mancanti).
3. prosegui con marzo, aprile ecc.

Se le operazioni di unione dei 12 file le devi dare più di una volta allora una volta trovato il criterio puoi utilizzare il
registratore di macro,
fare le operazioni di “normalizzazione” e poi copiare i dati
ed avrai
una macro da riutilizzare (dopo averla eventualmente modificata).

A parole sembra complesso invece è facile ma occorre molta attenzione alla posizione delle colonne che mese per mese andrai ad inserire per normalizzare il tutto.

Se puoi inviare dei file di tre quattro mesi che siano ridotti come numero di righe e senza dati riservati ti posso fare una macro che utilizzerai come base per fare tutti i mesi.
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: Collegare fogli di lavoro in Excel

Postdi disseria » 02/12/10 14:19

Cioè tu dici di creare un file con le intestazioni colonna che comprendano tutte le colonne possibili???

se fosse cosi poi dopo sarebbe possibile fare in modo che vengano copiati i dati nelle varie colonne in automatico?

Per quanto riguarda l'inviarti i file se fosse per me l'avrei già fatto, però ci sono informazioni riservate e purtroppo non posso farlo XD
disseria
Newbie
 
Post: 5
Iscritto il: 30/11/10 12:06

Re: Collegare fogli di lavoro in Excel

Postdi ricky53 » 02/12/10 23:29

Ciao,
si intendevo fare un nuovo file che avess come colonne l'unione di tutte le colone univoche presenti nei vari file.

Per l'esempio da inviare puoi modificare i dati riservati sostituendoli con dati con reali.

Qullo che conta è avere le intestazioni di colonna e qualche dato per poter iniziare e scrivere una macro
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: Collegare fogli di lavoro in Excel

Postdi Anthony47 » 03/12/10 00:35

Sulla base di quello che ho capito, assummendo che l' ordine in cui compaiono le colonne e' sempre lo stesso salvo che alcune possono mancare, e che le intestazioni di colonna siano in riga 1, da col A in avanti:
-Fai un file che contiene un foglio MODELLO con tutte le intestazioni di colonna che aspetti di trovarti.
-Metti in questo file questa macro e salva:
Codice: Seleziona tutto
Sub mormadiss()
Dim C As Integer, I As Integer
If ActiveWorkbook.Name = ThisWorkbook.Name Then
    MsgBox ("Selezionare il File /Foglio da normalizzare e poi lanciare la macro")
    Exit Sub
End If

For C = 1 To Cells(1, Columns.Count).End(xlToLeft).Column
    If IsError(Application.Match(Cells(1, C), _
        ThisWorkbook.Sheets("Modello").Range("1:1"), 0)) Then
    MsgBox ("Valore " & Cells(1, C).Value & " in " & Cells(1, C).Address & " non in MODELLO")
    Exit Sub
    End If
Next C
I = 0
For C = 1 To Cells(1, Columns.Count).End(xlToLeft).Column
    If Cells(1, C + I) <> ThisWorkbook.Sheets("Modello").Cells(1, C + I) Then
        Cells(1, C + I).EntireColumn.Insert Shift:=xlToRight
        ThisWorkbook.Sheets("Modello").Cells(1, C + I).EntireColumn.Copy _
           Destination:=Cells(1, C + I)
        I = I + 1: C = C - 1
    End If
Next C
End Sub
-Apri poi il file da "normalizzare", sul foglio con i dati, e manda in esecuzione la macro.

Essa ti dira' se ci sono intestazioni su riga 1 che non sono presenti su MODELLO; si ferma sulla prima segnalazione, cioe' non riporta tutte le mancanze perche' ho assunto che sia una cosa quasi eccezionale.
Poi procedera' a controllare ogni intestazione, inserendo da MODELLO le colonne mancanti.

Da provare tassativamente su file che siano copia dei veri dati.

Nel caso che quanto sopra risolva, per quanto riguarda il file da allegare io direi che dovrebbe bastare file con le sole intestazioni complessive insieme a un file con le sole intestazioni del mese, cioe' senza ulteriori dati; o no (Ricky)?

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

Re: Collegare fogli di lavoro in Excel

Postdi disseria » 03/12/10 11:53

ok, l'unico problema è però che l'ordine in cui compaiono le colonne può essere differente tra i vari file...e credo che la macro non tenga in considerazione questa cosa, o sbaglio?
disseria
Newbie
 
Post: 5
Iscritto il: 30/11/10 12:06

Re: Collegare fogli di lavoro in Excel

Postdi ricky53 » 03/12/10 14:27

Ciao,
si Anthony solo l'intestazione di colonna per i file del mese.
Sarebbe molto utile averle queste intestazioni di colonna dei vari file mensili.

Io mi sono fatto l'idea che dopo aver redatto il modello e "normalizzato" i vari mesi fai prima se fai tutto MANUALMENTE (sono solo 12 copia incolla accodando di volta in volta) ... poi vedi tu.
Tutto dipende dal fatto che l'operazione venga fatta una sola volta altrimenti occorre necessariamente una macro e potresti utilizzare quanto inviato da Anthony, forse adattato ... di nuovo vedi tu.
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: Collegare fogli di lavoro in Excel

Postdi Anthony47 » 04/12/10 01:50

ok, l'unico problema è però che l'ordine in cui compaiono le colonne può essere differente tra i vari file...e credo che la macro non tenga in considerazione questa cosa, o sbaglio?

No, non sbagli: hai correttamente interpretato il mio criptico "assummendo che l' ordine in cui compaiono le colonne e' sempre lo stesso salvo che alcune possono mancare, e che le intestazioni di colonna siano in riga 1, da col A in avanti, etc etc"

Immagino che i file mensili siano dei report aziendali, quindi il primo consiglio che devo dare e' di trasferire qualcuno dentro il reparto IT al reparto imballi; vedi tu cosa farne...

Per quanto riguarda la possibile soluzione:
-Fai un file che contiene un foglio MODELLO con tutte le intestazioni di colonna che aspetti di trovarti.
-Metti in questo file questa macro e salva:
Codice: Seleziona tutto
Sub mormadiss2()
Dim C As Integer, I As Integer
CWb = ActiveWorkbook.FullName
MsgBox (CWb)
If ActiveWorkbook.Name = ThisWorkbook.Name Then
    MsgBox ("Selezionare il File /Foglio da normalizzare e poi lanciare la macro")
    Exit Sub
End If

For C = 1 To Cells(1, Columns.Count).End(xlToLeft).Column
    If IsError(Application.Match(Cells(1, C), _
        ThisWorkbook.Sheets("Modello").Range("1:1"), 0)) Then
    MsgBox ("Valore " & Cells(1, C).Value & " in " & Cells(1, C).Address & " non in MODELLO")
    Exit Sub
    End If
Next C
For C = 1 To Cells(1, Columns.Count).End(xlToLeft).Column
    CDest = Application.Match(Cells(1, C), ThisWorkbook.Sheets("Modello").Range("1:1"), 0)
    Cells(1, C).EntireColumn.Copy _
     Destination:=ThisWorkbook.Sheets("Modello").Cells(1, CDest)
Next C
ThisWorkbook.Activate
NWbName = Replace(CWb, ".xls", "_NORM.xls")  '<< *** vedi testo
    ActiveWorkbook.SaveAs Filename:=NWbName, _
        FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
        ReadOnlyRecommended:=False, CreateBackup:=False

End Sub
-Apri poi il file da "normalizzare", sul foglio con i dati, e manda in esecuzione la macro.

Essa ti dira' se ci sono intestazioni su riga 1 che non sono presenti su MODELLO; si ferma sulla prima segnalazione, cioe' non riporta tutte le mancanze perche' ho assunto che sia una cosa quasi eccezionale.
(fin qui, a parte la macro, le istruzioni sono quelle gia' date)
Poi la macro prelevera' i dati dal file mensile e li copiera' sul foglio MODELLO, nella colonna appropriata; infine salvera' il file col modello col nome "IlFileDiPartenza_NORM.xls"
Nota ***: Se usi XL2007 il formato di out dovra' essere _NORM.xlsm"; aggiusta la riga se il file di partenza non e' un .xls.

Il lato negativo di questo metodo, ampiamente copiato dal precedente, e' che il file generato contiene anche lui la macro che ti ho detto.
Se questo da' fastidio, allora fai un triangolo:
-un file di servizio con la macro
-un file Modello col foglio MODELLO
-il file da convertire

Quindi aggiusta la macro in modo che invece di ThisWorkbook sia usato Workbooks("Modello"), ed eventualmente inserisci in testa l' istruzione
Codice: Seleziona tutto
Workbooks.Open Filename:= _
        "C:\Documents and Settings\Utente\Documenti\Modello.xls" _
        , Editable:=True
In questo modo tu aprirai il file mensile piu' il file di servizio (con la macro), e sara' la macro ad aprire il modello, che altrimenti dovra' essere aperto manualmente insieme al file mensile.

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

Re: Collegare fogli di lavoro in Excel

Postdi disseria » 07/12/10 00:45

Perfetto, grazie mille!!!in settimana la provo...solo che ho scoperto l'ennesimo problema, ovvero che alcune colonne che contengono lo stesso tipo di info hanno nomi leggermente diversi...ed ovviamente questo "leggermente" per excel non conta...

a parte qundi le bestemmie appena me ne sono accorto, ho provato risolvere cosi, in modo mooolto macchinoso:
- foglio con tutte le intestazioni incollate con il trasponi, x maggiore chiarezza, soprattutto a livello visivo;
- ho cercto di normlizzare i vari fogli, agiungendo banalmente delle colonne dove necessario, di modo da averli, almeno per le prime colonne, il più uguali possibile;
- ho fatto una marea di copia incolla, ovviamente in maniera del tutto scrupolosa e assololutamente non sistematica
risultato: 63.000 righe occupate...e quando pensavo di aver finito mi sono accorto che c'era una riga di troppo da qualche parte...solo una...immaginate la reazione dopo 4 ore di lavoro su quel file...
disseria
Newbie
 
Post: 5
Iscritto il: 30/11/10 12:06


Torna a Applicazioni Office Windows


Topic correlati a "Collegare fogli di lavoro in Excel":


Chi c’è in linea

Visitano il forum: Nessuno e 61 ospiti