Condividi:        

Come unire due fogli

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

Come unire due fogli

Postdi M@rtyn@ » 16/05/12 17:20

Buon giorno,
come posso fare per unire due fogli? In Foglio1 ho un calendario completo nella colonna A, mentre in Foglio2 ho nella colonna A :undecided: solo alcune date e nelle colonne da B a H i dati che voglio copiare.
Mi servirebbe qualcosa del tipo:
Cerca la cella contenente la stessa data e copia la riga di Foglio2 in Foglio1.
Il risultato finale bovrebbe essere un calendario dove posso vedere a colpo d'occhi i giorni che separano i dati che mi interessano.
:undecided: Si capisce?
xp con Excel 2007
windows 8 con excel 2013
M@rtyn@
Utente Junior
 
Post: 88
Iscritto il: 02/03/11 21:03

Sponsor
 

Re: Come unire due fogli

Postdi ricky53 » 16/05/12 18:45

Ciao,
nella colonna "B" del Foglio1 per ogni riga della colonna "A" con le date puoi utilizzare la funzione "CERCA.VERT"
provata nella colonna "B" prosegui con la "C", ecc fino ad avere tutti i dati che ti occorrono.
Per esempio
in B2 puoi scrivere
=CERCA.VERT(A2; Foglio2!$A$2:$H$100; 2; 0)
Ho ipotizzato che le celle del foglio2 con date siano 100, adatta gli intervalli e copia in basso la formula.

Leggi la guida sull'utilizzo di questa funzione e ... sono QUI
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: Come unire due fogli

Postdi Zer0Kelvin » 16/05/12 18:54

Ciao.
Dovresti poter risolvere così:
nella cella B2 di foglio 1 metti:
=SE.ERRORE(CERCA.VERT(Foglio1!$A1;Foglio2!$A:$H;2;FALSO);"")
nella cella C3
=SE.ERRORE(CERCA.VERT(Foglio1!$A1;Foglio2!$A:$H;3;FALSO);"")
e così via fino alla colonna H aumentando ogni volta di 1 il numero che precede FALSO nella formula;
poi selezioni tutte le celle con le formule e trascini verso il basso finchè serve...
Sel il calendario non comincia alla riga 1 devi solo correggere il riferimento:
Codice: Seleziona tutto
Foglio1!$A1
Ultima modifica di Zer0Kelvin su 16/05/12 18:59, modificato 1 volte in totale.
[Win7,Office2010]
Condividere la conoscenza aumenta la ricchezza di tutti(Z0°K)
Dai ad un uomo un pesce e lo avrai sfamato per un giorno;insegnagli a pescare e lo avrai sfamato per sempre(Confucio)
Il sonno della ragione genera mostri(Francisco Goya)
Avatar utente
Zer0Kelvin
Utente Senior
 
Post: 388
Iscritto il: 08/04/12 11:23

Re: Come unire due fogli

Postdi ricky53 » 16/05/12 18:57

Ciao 0°K,
proprio tutto gli vogliamo fare ... il controllo sul non trovato sarebbe stato il passo successivo dopo aver applicato la formula e trovato il #N/D ...

Prodotto chiavi in mano.


M@rtyn@ : e cosa volevi di più !!!
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: Come unire due fogli

Postdi Zer0Kelvin » 16/05/12 19:00

eh, ma allora ditelooo! :)
[Win7,Office2010]
Condividere la conoscenza aumenta la ricchezza di tutti(Z0°K)
Dai ad un uomo un pesce e lo avrai sfamato per un giorno;insegnagli a pescare e lo avrai sfamato per sempre(Confucio)
Il sonno della ragione genera mostri(Francisco Goya)
Avatar utente
Zer0Kelvin
Utente Senior
 
Post: 388
Iscritto il: 08/04/12 11:23

Re: Come unire due fogli

Postdi Flash30005 » 16/05/12 20:34

Hai già delle soluzioni con formule (leggi precedenti post: Ricky e Zer0Kelvin)
Se vuoi usare una macro prova questa
Codice: Seleziona tutto
Sub Trovadate()
Set Ws1 = Worksheets("Foglio1")
Set Ws2 = Worksheets("Foglio2")
Ws1.Range("B2:H50000").ClearContents
UR1 = Ws1.Range("A" & Rows.Count).End(xlUp).Row
UR2 = Ws2.Range("A" & Rows.Count).End(xlUp).Row
Ini1 = 2
For RR2 = 2 To UR2
Data2 = Ws2.Range("A" & RR2).Value
    For RR1 = Ini1 To UR1
        If Data2 = Ws1.Range("A" & RR1).Value Then
            Ws2.Range("B" & RR2 & ":H" & RR2).Copy Destination:=Ws1.Range("B" & RR1)
            Ini1 = RR1
        End If
    Next RR1
Next RR2
End Sub


Per accelerare il procedimento ho supposto che il calendario, nel Foglio1, sia in ordine crescente come pure le date nel Foglio2

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: Come unire due fogli

Postdi scossa » 16/05/12 20:50

Zer0Kelvin ha scritto:Ciao.
Dovresti poter risolvere così:
nella cella B2 di foglio 1 metti:
=SE.ERRORE(CERCA.VERT(Foglio1!$A1;Foglio2!$A:$H;2;FALSO);"")
nella cella C3
=SE.ERRORE(CERCA.VERT(Foglio1!$A1;Foglio2!$A:$H;3;FALSO);"")
e così via fino alla colonna H aumentando ogni volta di 1 il numero che precede FALSO nella formula;


Ciao,

tanto così pourparler, quando le colonne interessate dal cerca.vert() sono molte, la si può usare in forma matriciale.
Per esempio dati in Foglio2 da A2 ad H100:
selezioniamo le cella da B2 a H2 del foglio1 e mettiamo (excel 2007):
Codice: Seleziona tutto
=SE.ERRORE(CERCA.VERT(A2;Foglio2!$A$2:$H$100;{2;3;4;5;6;7;8};0);"")

o in excel 2003:
Codice: Seleziona tutto
=SE(VAL.NON.DISP(CERCA.VERT(A2;Foglio2!$A$2:$H$100;{2;3;4;5;6;7;8};0));"";CERCA.VERT(A2;Foglio2!$A$2:$H$100;{2;3;4;5;6;7;8};0))

matriciale da confermare con maiusc+ctrl+invio.

Svantaggio: essendo matriciale potrebbe essere più pesante per la cpu;

Vantaggi: più rapida da scrivere, e protezione intrinseca da modifiche e/o cancellazioni delle singole celle, in quanto per modificare una matriciale bisogna selezionare tutte le celle della matrice.

A dire il vero io, in forma matriciale, l'ho usata pochissime volte e solo per il vantaggio della protezione intrinseca, per cui prendetela come un'idea "simpatica", tanto per sapere che esiste anche questa possibilità ;)

EDIT: - Modera Flash30005 - Aggiungere post anche risolutivi senza avvisare di leggere i precedenti può confondere sia il richiedente che altri ed eventuali utenti in cerca di soluzioni.
Per M@rtin@ leggi tutti i post precedenti
Bye!
scossa

Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)
Avatar utente
scossa
Utente Senior
 
Post: 427
Iscritto il: 01/04/12 16:40
Località: Provincia di Verona

Re: Come unire due fogli

Postdi scossa » 16/05/12 21:16

scossa ha scritto:Vantaggi: più rapida da scrivere, e protezione intrinseca da modifiche e/o cancellazioni delle singole celle, in quanto per modificare una matriciale bisogna selezionare tutte le celle della matrice.

Dimenticavo, se i valori restituiti sono numeri da - ad esempio sommare - il vantaggio è notevole:
Codice: Seleziona tutto
=SOMMA(CERCA.VERT(A1;$H$1:$M$1;{2;3;4;5;6};0))

sempre da confermare con ctrl+maius+invio
Bye!
scossa

Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)
Avatar utente
scossa
Utente Senior
 
Post: 427
Iscritto il: 01/04/12 16:40
Località: Provincia di Verona

Re: Come unire due fogli

Postdi alby60 » 16/05/12 23:30

Ciao Scossa, ho trovato molto interessante quanto hai scritto.
Codice: Seleziona tutto
=SE(VAL.NON.DISP(CERCA.VERT(A2;Foglio2!$A$2:$H$100;{2;3;4;5;6;7;8};0));"";CERCA.VERT(A2;Foglio2!$A$2:$H$100;{2;3;4;5;6;7;8};0))

Ho copiato la formula in B2, poi Ctrl+Shift+Invio e ho copiato fino ad H2, poi ho copiato in basso ma, su ogni riga, ottengo solo i dati della colonna B del foglio2 della riga 2,3,4,5. Stessa cose su tutte le righe.
Sai dirmi cosa occorre fare in particolare?
alby60
Utente Junior
 
Post: 76
Iscritto il: 18/11/10 01:04

Re: Come unire due fogli

Postdi Anthony47 » 16/05/12 23:44

Manco solo io, quindi mi accodo... :D
1) Per Alby: per produrre l' effetto
-metti la formula in B2, come Contr-Maiusc-Enter;
-selezioni B2:H2; F2 (edit); Contr-Maiusc-Enter
Ricorda che a quel punto potrai editare la formula solo sull' intera area

2) Un suggerimento ai colleghi che si prodigano per la soluzione del problema postoci:
Vorrei chiedervi di rimandare la fase di "perfezionamento" a quando l' utente avra' confermato la soluzione al suo problema; in questa fase dovremmo invece puntare alla soluzione piu' semplice da applicare. Ingolfare di suggerimenti un utente "non espertissimo" puo' rivelarsi infatti controproducente.
DOPO, se ci piace, possiamo "divertirci" a scambiare le idee su come si puo' fare meglio, senza l' obbligo per l' utente di dover capire le nostre argomentazioni (ma con la convinzione che ci provera').

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

Re: Come unire due fogli

Postdi Zer0Kelvin » 16/05/12 23:52

Zer0Kelvin ha scritto:nella cella B2 di foglio 1 metti:
...
nella cella C3
...

Mi sono appena acorto di un refuso! :oops:
Avrebbe dovuto essere
nella cella B1 di foglio 1 metti:
...
nella cella C1
...
:undecided:
[Win7,Office2010]
Condividere la conoscenza aumenta la ricchezza di tutti(Z0°K)
Dai ad un uomo un pesce e lo avrai sfamato per un giorno;insegnagli a pescare e lo avrai sfamato per sempre(Confucio)
Il sonno della ragione genera mostri(Francisco Goya)
Avatar utente
Zer0Kelvin
Utente Senior
 
Post: 388
Iscritto il: 08/04/12 11:23

Re: Come unire due fogli

Postdi Flash30005 » 17/05/12 00:04

CHE CASINO!!!! :aaah
Q8 Anthony per quanto riguarda la netiquette dei post

@M@rtin@ rileggi tutti i post dal tuo ultimo post in poi (hai soluzione funzionali) e fornisci la soluzione più adeguata da, eventualmente, perfezionare.

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: Come unire due fogli

Postdi M@rtyn@ » 17/05/12 21:29

Eccomi! Ciao a tutti e grazie per essere accorsi così numerosi.
Allora...Prima di tutto premetto che uso Excel 2007
Caro Ricky siccome hai confessato che alla tua prima formula mancava un pezzo prima che mi riconnettessi,devi scusarmi ma l'ho allegramente ignorata.
Ho provato invece la formula di Zer0Kelvin : però quando la trascinavo non succedeva niente :?: (per questo la premessa)
così ho fatto un po' di decoupage di codice e messo insieme questa:
Codice: Seleziona tutto
Sub Macro2()
'
' Macro2 Macro
'
' Scelta rapida da tastiera: CTRL+a
For x = 1 To 27011
    Selection.Copy
    ActiveCell.Offset(1, 0).Range("B1:H1").Select
    ActiveSheet.Paste
Next
End Sub

Tempo di elaborazione dati 11'22''
Mi sono connessa per rendervi partecipi del risultato ma ho trovato tutti i messaggi nuovi così ho chiuso ed ho provato anche gli altri.
La macro di Flash funziona (anche se preferisco vedere scorrere i dati , così mi viene la paranoia che si sia impallato il computer) ma il processo é molto più lento l'ho fermata dopo 12'00'' ed era arrivata solo alla riga 7035.
La formula di Scossa mi da lo stesso problema che da ad Alby se cerco di usare la soluzione di Anthony (che non sono sicurissima di aver capito) appena premo Contr-Maiusc-Enter l'ultima volta si dividono le celle e ritorna come la versione di Scossa, mentre se provo a trascinarla o a usare la macro o fare qualsiasi altra cosa dopo aver premuto f2 mi appare un messaggio " impossibile modificare una matrice".(Anche per questo la premessa)
xp con Excel 2007
windows 8 con excel 2013
M@rtyn@
Utente Junior
 
Post: 88
Iscritto il: 02/03/11 21:03

Re: Come unire due fogli

Postdi ricky53 » 17/05/12 23:39

Ciao,
alla mia formula non mancava un pezzo; non avevo volutamente scritto la gestione del caso di data non trovata in cui si ottiene #N/D che è fastidioso da vedere e crea problemi in caso di somma fra i dati. Non lo avevo scritto per darti la possibilità di provare la formula, leggere la guida e poi applicare l'implementazione.

Comunque puoi riprovare con la formula "CERCA.VERT" con la gestione del non trovato che è quella di 0°K seguendo quanto lui ti ha scritto oppure la proposta di Scossa che va applicata seguendo quanto lui ha scritto ad Alby.

Commento: i tempi che hai sono lunghissimi non vale la pena di vedere i dati che vengono copiati.

Vedo che tu hai oltre 27000 righe per 8 colonne ... non VA assolutamente fatto quello che dici ti piace ... io utilizzerei una ARRAY (Matrice) per lavorare nella memoria del PC e non sulle celle del foglio e poi copierei i dati. In questo modo i tempi saranno molto brevi.
Se posso ti invierò una macro di esempio
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: Come unire due fogli

Postdi ricky53 » 18/05/12 00:04

Ciao,
devo correggere quanto ho scritto in
proposta di Scossa che va applicata seguendo quanto lui ha scritto ad Alby.


Non è stato Scossa a chiarire ad Alby come utilizzare la formula proposta ma Anthony.

Scusatemi
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: Come unire due fogli

Postdi ricky53 » 18/05/12 01:03

Ciao Martina,
prima leggi gli interventi precedenti.

Adesso prova questa macro
Codice: Seleziona tutto
Option Explicit
Option Base 1

Sub Copia_Dati()
    Dim WS1 As Worksheet, WS2 As Worksheet
    Dim UR1 As Long, UR2 As Long
    Dim I As Long, J As Long, K As Integer
    Dim Matrice1(), Matrice2()
    Dim Inizio As Date
    Dim Elaborati As Long
   
    Inizio = Timer
    Sheets("Foglio1").Select
    Set WS1 = Sheets("Foglio1")
    Set WS2 = Sheets("Foglio2")
    UR1 = WS1.Range("A" & Rows.Count).End(xlUp).Row
    UR2 = WS2.Range("A" & Rows.Count).End(xlUp).Row
   
    WS1.Range("B2:H" & UR1).ClearContents
    Application.ScreenUpdating = False
   
    Matrice1 = WS1.Range("A2:H" & UR1)
    Matrice2 = WS2.Range("A2:H" & UR2)
   
    Elaborati = 0
    For I = 1 To UR2 - 1
        For J = 1 To UR1 - 1
            If Matrice1(J, 1) = Matrice2(I, 1) Then
                For K = 2 To 8
                    Elaborati = Elaborati + 1
                    Matrice1(J, K) = Matrice2(I, K)
                Next K
                Exit For
            Else
                Elaborati = Elaborati + 1
            End If
        Next J
    Next I
   
    WS1.Range("A2:H" & UR1) = Matrice1
   
    WS1.Range("A2").Select
    Set WS1 = Nothing
    Set WS2 = Nothing
    Application.ScreenUpdating = True
   
    MsgBox "Effettuata copia dei dati !!!" & vbCrLf & vbCrLf & "Tempo impiegato:  " & _
        Format((Timer - Inizio) / 86400, "hh.mm.ss") & vbCrLf & "Con: " & _
        Format(Elaborati, "#,###") & " Cicli elaborativi"
End Sub

La macro elabora i dati in due matrici (Matrice1 che contiene i dati del foglio1, Matrice2 contiene i dati del foglio2) e poi copia i dati della Matrice1 nel Foglio1

Vista l'ora non l'ho testata a fondo e ... provala bene tu.
Comunque è molto veloce: con 20.000 righe su tutti e due i fogli impiega pochi secondi.

A domani
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: Come unire due fogli

Postdi Flash30005 » 18/05/12 02:18

Leggi il post di Ricky

Nella mia macro avevo escogitato il sitema per velocizzarla ma poi non l'avevo applicato con il salto
(GoTo saltaRR2 mancante) :cry:
ora i tempi sono drasticamente ridotti (14.000 righe in 0,5 secondi)
Purtroppo excel 2007 impiega da 2 a 3 volte il tempo di esecuzione ottenuto con excel 2003
Codice: Seleziona tutto
Sub Trovadate2()
Start = Timer
Set WS1 = Worksheets("Foglio1")
Set WS2 = Worksheets("Foglio2")
WS1.Range("B2:H50000").ClearContents
UR1 = WS1.Range("A" & Rows.Count).End(xlUp).Row
UR2 = WS2.Range("A" & Rows.Count).End(xlUp).Row
Ini1 = 2
For RR2 = 2 To UR2
Data2 = WS2.Range("A" & RR2).Value
    For RR1 = Ini1 To UR1
        If Data2 = WS1.Range("A" & RR1).Value Then
            WS2.Range("B" & RR2 & ":H" & RR2).Copy Destination:=WS1.Range("B" & RR1)
            Ini1 = RR1
            GoTo saltaRR2
        End If
    Next RR1
saltaRR2:
Next RR2
WS2.Range("N1").Value = Timer - Start
End Sub


(avvia la macro e, per vincere la paranoia, prova ad andare a prendere un caffé, se ci riesci... :D )

Ciao

P.s. Domanda: ma in 27.000 righe (giorni) stai prendendo in considerazione circa 80 anni? :eeh:
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: Come unire due fogli

Postdi scossa » 18/05/12 07:33

Flash30005 ha scritto:
Codice: Seleziona tutto
'.... cut
For RR2 = 2 To UR2
 ......
    For RR1 = Ini1 To UR1
        If Data2 = WS1.Range("A" & RR1).Value Then
            ...........
            GoTo saltaRR2 ' <---- sostituire con Exit For
            .........
        End If
    Next RR1
saltaRR2: '<---- eliminare
Next RR2

'....cut



Ciao Flash,

solo per ricordare che esiste l'istruzione Exit For che permette di evitare il GoTo e rende il codice più facile da "seguire".
Bye!
scossa

Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)
Avatar utente
scossa
Utente Senior
 
Post: 427
Iscritto il: 01/04/12 16:40
Località: Provincia di Verona

Re: Come unire due fogli

Postdi Flash30005 » 18/05/12 09:21

scossa ha scritto:esiste l'istruzione Exit For che permette di evitare il GoTo e rende il codice più facile da "seguire".

sono solo punti di vista con exit for devi seguire passo passo il codice (specialmente se hai più for...next)
così ho un'etichetta e secondo me è più leggibile.

EDIT: ore 14:30 - dopo test
aggiungo che inserendo Exit For invece che Goto... a parità di righe e PC nelle stesse condizioni ho tempi più lunghi
Con Exit for......... 0,484375
Con Goto SataRR2.. 0,4375

Quindi rimango della mia idea :D
(Rispondo anche a Ricky che chiedeva spiegazioni sulla mia scelta)
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: Come unire due fogli

Postdi ricky53 » 18/05/12 13:30

Ciao Flash,
non mi torna che impighi meno tempo.
Nel tuo codice ScreeUpdating non c'è nel file che utilizzi lo avrai sicuramente messo.

Controlla quanti cicli fa utilizzando una variabile che incrementi nel ciclo interno ed avri lo stesso valore di cicli.
Il tempo dipenderà dal carico del Pc, in quel momento, ma non dal tempo elaborativo dei cicli perchè Exit For e GoTo producono lo stesso effetto andando nello stesso punto del tuo codice.

Se vogliamo continuare e chiairci è meglio aprire una nuova discussione,per non intasare questa,oppure scriverci privatamente.
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

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "Come unire due fogli":


Chi c’è in linea

Visitano il forum: Nessuno e 72 ospiti