Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[excel] - unione dati di file diversi con codice univoco

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] - unione dati di file diversi con codice univoco

Postdi leotaglia » 09/04/11 01:42

ciao a tutti,
ho cercato di leggere e capire ma proprio non ci arrivo.
Avrei bisogno di creare un file unico excel partendo da 2 file contenenti un elenco di articoli (cod.art. (colonna A) univoco) e con colonne diverse.
Sul file LISTINO ho: cod.articolo (A), descrizione (B), aliquota iva (C).
Sull'altro file OFFERTE ho: cod.articolo (A), descrizione (B), sconto (C) e mese di validità dello sconto (D).
I file chiaramente sono molto più grandi (5000 articoli per il listino).
Esiste il caso in cui un record su OFFERTA non esista in LISTINO e viceversa. Potrei incollare i due file su 2 fogli dello stesso file se facilitasse le cose.
Grazie a tutti (è da ieri che ci provo ed è la seconda notte insonne)
se qualcuno provasse ad aiutarmi avrei anche dei file di esempio
Leo
leotaglia
Utente Junior
 
Post: 11
Iscritto il: 09/04/11 01:12

Sponsor
 

Re: [excel] - unione dati di file diversi con codice univoco

Postdi ricky53 » 09/04/11 17:47

Ciao,
ti invio uno schema che utilizzo io quando devo unire due fogli un uno "Finale" che deve contenere tutti i codici presenti nei due fogli di partenza.

Va adattato per copiare le colonne che ti interessano.
Inizia a provare l'esempio, su un file copia del tuo originale, così come è scritto e poi vediamo di adattare il codice ...
Primo passo: inserisci un nuovo foglio ed assegnagli come nome: "Finale"

Avvia l'editor del Vb con "Alt+F11"
Inserisci un modulo
copia, in questo modulo, il codice che ti ho inviato
vai sul foglio "Finale"
con "Alt+F8" esegui la macro "Copia_Articoli_da_più_Fogli"


Codice: Seleziona tutto
Option Explicit
Option Base 1
Option Compare Text
Private I As Long, J As Long, K As Integer, X As Integer, UR1 As Long, UC1 As Integer, UC2 As Integer, UR2 As Long
Private WsIn1 As Worksheet, WsIn2 As Worksheet, WsOut As Worksheet
Private RangeIn1 As Range, RangeIn2 As Range, RangeOut As Range
Private MatriceIn1(), MatriceIn2(), MatriceOut()

Sub Copia_Articoli_da_più_Fogli()
    Dim Inizio As Double
    Dim Fine As Double
    Inizio = Timer
    Application.ScreenUpdating = False
    Application.Calculation = xlManual
   
    Set WsIn1 = Sheets("Listino")
    Set WsIn2 = Sheets("Offerte")
    Set WsOut = Sheets("Finale")
   
    UR1 = WsOut.Range("A" & Rows.Count).End(xlUp).Row
    If UR1 >= 2 Then
        WsOut.Range("A2:F" & UR1).ClearContents
    End If
   
    UC1 = WsIn1.Range("A2").End(xlToRight).Column
    UC2 = WsIn2.Range("A2").End(xlToRight).Column
   
    UR1 = WsIn1.Range("A" & Rows.Count).End(xlUp).Row
    Set RangeIn1 = WsIn1.Range(WsIn1.Cells(2, 1), WsIn1.Cells(UR1, UC1))
    MatriceIn1 = RangeIn1
   
    UR2 = WsIn2.Range("A" & Rows.Count).End(xlUp).Row
    Set RangeIn2 = WsIn2.Range(WsIn2.Cells(2, 1), WsIn2.Cells(UR2 + 1, UC2))
    MatriceIn2 = RangeIn2
   
    ReDim MatriceOut(UR1 + UR2, UC2)
   
    K = 0
    J = 1
    For I = 1 To UR1 - 1
Continua:
        K = K + 1
        If MatriceIn1(I, 1) > MatriceIn2(J, 1) And MatriceIn2(J, 1) <> "" Then
' Articolo di "2" non presente su "1"
            Scrivi_Dati_Maggiori
            J = J + 1
            GoTo Continua
        Else
            If MatriceIn1(I, 1) = MatriceIn2(J, 1) Then
                Scrivi_Dati_Uguali
                J = J + 1
            Else
' Articolo di "1" non presente su "2"
                Scrivi_Dati_Minori
            End If
        End If
    Next I
    If MatriceIn1(UR1 - 1, 1) < MatriceIn2(J, 1) Then
' Restanti Articoli di "2" non presenti su "1"
        Scrivi_Restanti_di_2
    End If
   
    Set RangeOut = WsOut.Range(WsOut.Cells(2, 1), WsOut.Cells(UR1 + UR2, UC2))
    RangeOut = MatriceOut
   
    Application.ScreenUpdating = True
    Application.Calculation = xlAutomatic
    Fine = Timer
    MsgBox "Elaborazione Terminata. Tempo impegato per l'elaborazione:  " & Round(Fine - Inizio, 3)
End Sub

Sub Scrivi_Dati_Maggiori()
' Articolo di "2" non presente su "1"
    For X = 1 To UC2
        MatriceOut(K, X) = MatriceIn2(J, X)
    Next X
End Sub

Sub Scrivi_Dati_Uguali()
    For X = 1 To UC1
        MatriceOut(K, X) = MatriceIn1(I, X)
    Next X
End Sub

Sub Scrivi_Dati_Minori()
' Articolo di "1" non presente su "2"
    For X = 1 To UC1
        MatriceOut(K, X) = MatriceIn1(I, X)
    Next X
End Sub

Sub Scrivi_Restanti_di_2()
' Ulteriori Articoli di "2" non presenti su "1"
    Do While J < UR2
        Scrivi_Dati_Maggiori
        J = J + 1
        K = K + 1
    Loop
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. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [excel] - unione dati di file diversi con codice univoco

Postdi leotaglia » 10/04/11 00:13

Prima di tutto grazie per l'aiuto. Sono nuovo del forum e non credevo di ricevere risposta.
Allego file di esempio su cui faccio le prove e 2 file reali. Dopo averli montati su 2 fogli vorrei avere come risultato un foglio con il contenuto di quello più grande (Listino) con aggiunte 2 colonne (sconto e mese offerta) che sono sul file piccolo (PROMO).
Gli articoli che per caso fossero su PROMO E NON IN listino POTREBBERO ANCHE ESSERE tralasciati oppure aggiunti con le colonne VUOTE in corrispondenza dei dati mantanti.

file esempio:
NON POSSO MANDARE LINK PER ADESSO, almeno 3 post.

file reali:
NON POSSO MANDARE LINK PER ADESSO, almeno 3 post.

Domani cerco di capire qualcosa del codice che mi hai mandato ma davvero mi sento piuttosto ignorante. Leggendo ieri il forum e immaginandomi che qualcuno mi chiedesse: sai usare excel? la risposta d'ora in poi sarà: NO!

Grazie,
Leo
leotaglia
Utente Junior
 
Post: 11
Iscritto il: 09/04/11 01:12

Re: [excel] - unione dati di file diversi con codice univoco

Postdi ricky53 » 10/04/11 00:21

Ciao,
per procedere occorrono condizioni precise.

Puoi descrivere la struttura (quante e quali colonne contengono) del foglio "Listino" e del foglio "Promo" specificando ogni colonna cosa deve contenere.
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. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [excel] - unione dati di file diversi con codice univoco

Postdi gianc » 10/04/11 08:40

Salve
Ricky, non sarebbe meglio un semplice cerca.vert?
gli tornerebbe più comodo anche in futuro. Avesse ancora necessità non avrebbe problemi ad adattarlo per fare quello che gli serve.
gianc
Utente Junior
 
Post: 59
Iscritto il: 19/03/11 00:51
Località: Pistoia

Re: [excel] - unione dati di file diversi con codice univoco

Postdi leotaglia » 10/04/11 09:06

grazie,
a dire il vero avevo provato (è stata la prima cosa che ho cercato di fare) ma non sono riuscito. Ho cercato anche info su confronta.indice ma non credo faccia al caso mio.
=CERCA.VERT(A:A;C:D;2;FALSO): non capisco come personalizzarlo.
Leo
leotaglia
Utente Junior
 
Post: 11
Iscritto il: 09/04/11 01:12

Re: [excel] - unione dati di file diversi con codice univoco

Postdi Anthony47 » 10/04/11 11:41

Ciao leotaglia, benvenuto nel forum.
A me sembra ancora "debole" la descrizione della richiesta che hai fatto.
Ad esempio mentre mi immagino che nel file LISTINO hai una riga per ogni codice mi immagino anche che nel file OFFERTE per ogni codice dovresti avere piu' di una riga; allora come vuoi combinare una riga (da LISTINO) con piu' righe (da OFFERTE)?
Come pure, e' possibile avere delle righe in OFFERTE per codici mancanti in Listino?

Adesso puoi linkare un allegato, "a complemento" della descrizione scritta del problema.

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: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [excel] - unione dati di file diversi con codice univoco

Postdi ricky53 » 10/04/11 12:02

Ciao gianc,
alla tua domanda ha risposto Anthony con
[/quote]... per ogni codice dovresti avere piu' di una riga ...[/quote]
da qui segue l'impossibilità di utilizzare "CERCA.VERT"

Leo attendiamo le condizioni che ti avevo già chiesto e che Anthony ha implementato con la richiesta di un file ...
FORZA che ne usciamo.
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. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [excel] - unione dati di file diversi con codice univoco

Postdi leotaglia » 10/04/11 22:55

eccoci.. grazie a tutti..
link per i file originali:
http://dl.dropbox.com/u/16894450/PROMO_ ... 4_2011.xls
http://dl.dropbox.com/u/16894450/Listin ... 202011.xls
e demo (con prova programmone di Ricky):
http://dl.dropbox.com/u/16894450/4FOGLI%20090411.xls
Provo a spiegare:
Vorrei ottenere su un foglio tutti i record contenuti in LISTINO (anche solo fino alla colonna "V" con 2 colonne aggiuntive (W e X) in cui dovrebbero essere contenuti i valori SCONTO e MESE OFFERTA presi dalla pagina PROMO.
Avete ragione riguardo al fatto che i codici in LISTINO sono univoci ma in PROMO no (possono esistere oppure no e possono anche essere doppi), quindi nella pagina FINALE devono essere anche ripetuti (a dire il vero non dovrebbe succedere ma penso che prudenzialmente lo devo mettere in conto).
Riguardo invece ai record presenti in PROMO e non in LISTINI la cosa migliore sarebbe che fossero SCARTATI (magari scritti in una pagina dal nome SCARTATI) oppure anche inclusi sulla pagina FINALE ma con tutti (tanti) i campi VUOTI, in modo che possa rintracciarli.
Altro anomalia possibile è che le descrizioni non siano identiche per stesso cod.articolo: in questo caso direi andrebbe bene sia usare quella di LISTINO che scrivere sulla pagina FINALE i 2 record.

Oggi ho lavorato :-( ma ho seguito dal telefono gli interventi e ringrazio tutti.
Leo
leotaglia
Utente Junior
 
Post: 11
Iscritto il: 09/04/11 01:12

Re: [excel] - unione dati di file diversi con codice univoco

Postdi ricky53 » 10/04/11 23:17

Ciao,
ho scaricato il file "4FOGLI 090411.xls" nel quale hai inserito la mia macro:
ho notato che i codici articolo presenti nei due fogli non sono ordinati in modo crescente e, quindi, la mia macro non può funzionare correttamente.
Si deve inserire l'ordinamento su entrambi i fogli.
Ci risentiamo domani e magari con una nuova versione della macro per tenere conto di alcune considerazioni fatte da te: ti dirò quali scelte ho riportato.
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. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [excel] - unione dati di file diversi con codice univoco

Postdi leotaglia » 10/04/11 23:21

a domani..
Leo
leotaglia
Utente Junior
 
Post: 11
Iscritto il: 09/04/11 01:12

Re: [excel] - unione dati di file diversi con codice univoco

Postdi ricky53 » 11/04/11 11:20

Cio Leo,
alcune domande e considerazioni:
Vorrei ottenere su un foglio tutti i record contenuti in LISTINO (anche solo fino alla colonna "V" con 2 colonne aggiuntive (W e X) in cui dovrebbero essere contenuti i valori SCONTO e MESE OFFERTA presi dalla pagina PROMO.

1. da "Listino" copiamo in "Finale" solo le colonne "A:V". A te va bene?
2. Oppure copiamo tuttel el colonne di "Listino" e sostituiamo le colonne "V:W" con le colonne del punto successivo ?
3. Quali sono le colonne di "PROMO" da prendere e copiare in "Finale" ?




Riguardo invece ai record presenti in PROMO e non in LISTINI la cosa migliore sarebbe che fossero SCARTATI (magari scritti in una pagina dal nome SCARTATI) oppure anche inclusi sulla pagina FINALE ma con tutti (tanti) i campi VUOTI, in modo che possa rintracciarli.

Propongo di scrivere i dati presenti in "Promo" e non presenti in "Listino" in un nuovo foglio "Scartati". a te va bene ?




Altro anomalia possibile è che le descrizioni non siano ide
ntiche per stesso cod.articolo: in questo caso direi andrebbe bene sia usare quella di LISTINO che scrivere sulla pagina FINALE i 2 record.

Propongo di copiare i dati da "Listino". A te va bene?


Attendo le tue risposte prima di modificare il codice che ti ho proposto in un mio precedente intervento.
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. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [excel] - unione dati di file diversi con codice univoco

Postdi leotaglia » 11/04/11 12:44

ricky53 ha scritto:Cio Leo,
alcune domande e considerazioni:
Vorrei ottenere su un foglio tutti i record contenuti in LISTINO (anche solo fino alla colonna "V" con 2 colonne aggiuntive (W e X) in cui dovrebbero essere contenuti i valori SCONTO e MESE OFFERTA presi dalla pagina PROMO.

1. da "Listino" copiamo in "Finale" solo le colonne "A:V". A te va bene?
2. Oppure copiamo tuttel el colonne di "Listino" e sostituiamo le colonne "V:W" con le colonne del punto successivo ?
3. Quali sono le colonne di "PROMO" da prendere e copiare in "Finale" ?

Opzione 1. sarebbe perfetta. colonna V compresa. Dopo questa colonna (in qualunque ordine) mi servirebbero le colonne prese da PROMO ed esattamente: E K L M (sono 4 e non 2 ma ho paura che non riuscirò più a modificare la macro e tra un pò mi serviranno anche le altre 2). L'ordine non è importante.


Riguardo invece ai record presenti in PROMO e non in LISTINI la cosa migliore sarebbe che fossero SCARTATI (magari scritti in una pagina dal nome SCARTATI) oppure anche inclusi sulla pagina FINALE ma con tutti (tanti) i campi VUOTI, in modo che possa rintracciarli.

Propongo di scrivere i dati presenti in "Promo" e non presenti in "Listino" in un nuovo foglio "Scartati". a te va bene ?

Benissimo.


Altro anomalia possibile è che le descrizioni non siano ide
ntiche per stesso cod.articolo: in questo caso direi andrebbe bene sia usare quella di LISTINO che scrivere sulla pagina FINALE i 2 record.

Propongo di copiare i dati da "Listino". A te va bene?

Benissimo.


Attendo le tue risposte prima di modificare il codice che ti ho proposto in un mio precedente intervento.


Infine sarebbe perfetto cancellare i record che non hanno nulla sulla colonne T (quelli con "-" o "nulla" sulla colonna EAN) e magari aggiungere anche questi in SCARTATI anche mescolati agli altri.

Spero di essere riuscito a farmi capire.
Grazie1000.
Leo
leotaglia
Utente Junior
 
Post: 11
Iscritto il: 09/04/11 01:12

Re: [excel] - unione dati di file diversi con codice univoco

Postdi ricky53 » 11/04/11 14:09

Ciao,
adesso ci siamo e mi è chiaro come operare.

Schematizzando si arriva sempre al risultato !!!

Infine sarebbe perfetto cancellare i record che non hanno nulla sulla colonne T (quelli con "-" o "nulla" sulla colonna EAN) e magari aggiungere anche questi in SCARTATI anche mescolati agli altri.

Bene. Si può fare facilmente.
Propongo, crepi l'avarizia, di creare un altro foglio con il nome "Cancellati da Listino" e copiare tutte le righe di "Listino" la cui colonna "T" rispetta le condizioni che hai scritto.

Problema (ma risolvibile) le colonne "Codice Articolo" dei due file non sono fra di loro omogenee e confrontabili direttamente perchè i dati hanno lunghezza diversa (causa presenza di zeri davanti al codice articolo).
Tu confermi che i codici sono tutti "numeri" ?
Se la risposta è "SI" si risolve facilmente (con una semplice controllo nel codice) altrimenti occorre provvedere in un altro modo ma si troverà, comunque, la soluzione.
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. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [excel] - unione dati di file diversi con codice univoco

Postdi leotaglia » 11/04/11 14:40

Si sono tutti valori numerici. Mi ero accorto ma scordato di fartelo notare. Io avevo messo sulla colonna il formato numero (senza decimali) e poi salvato in csv perchè gli zeri andavano via solo con doppio clic sulla cella. Dopo riaprivo il csv e lo risalvavo in xls.
Penso che tu sappia fare meglio.
Ok anche per la nuova pagina con gli scarti da listino.
ciao,
Leo
leotaglia
Utente Junior
 
Post: 11
Iscritto il: 09/04/11 01:12

Re: [excel] - unione dati di file diversi con codice univoco

Postdi leotaglia » 11/04/11 14:47

ricky53 ha scritto:Ciao,
adesso ci siamo e mi è chiaro come operare.

Schematizzando si arriva sempre al risultato !!!

Infine sarebbe perfetto cancellare i record che non hanno nulla sulla colonne T (quelli con "-" o "nulla" sulla colonna EAN) e magari aggiungere anche questi in SCARTATI anche mescolati agli altri.

Bene. Si può fare facilmente.
Propongo, crepi l'avarizia, di creare un altro foglio con il nome "Cancellati da Listino" e copiare tutte le righe di "Listino" la cui colonna "T" rispetta le condizioni che hai scritto.

Problema (ma risolvibile) le colonne "Codice Articolo" dei due file non sono fra di loro omogenee e confrontabili direttamente perchè i dati hanno lunghezza diversa (causa presenza di zeri davanti al codice articolo).
Tu confermi che i codici sono tutti "numeri" ?
Se la risposta è "SI" si risolve facilmente (con una semplice controllo nel codice) altrimenti occorre provvedere in un altro modo ma si troverà, comunque, la soluzione.


mi è venuto in mente una cosa.. essendo strano che questa colonna non sia numerica magari dalla prossima uscita del file la fanno numerica... in questo caso scoppia tutto oppure tutto continua a funzionare?
scusa e grazie
Leo
leotaglia
Utente Junior
 
Post: 11
Iscritto il: 09/04/11 01:12

Re: [excel] - unione dati di file diversi con codice univoco

Postdi ricky53 » 11/04/11 15:30

Caio,
non ho detto che le colonne non sono numeriche ma avevo scritto che hanno lunghezza diversa, comuqnue contenevano numeri con zeri davanti.

In Listino la lunghezza è "5", in "Offerte" la lunghezza è "7"

Se le due colonne contengono solo "numeri" il problema non sussiste: si risolve tramite codice con la funzione "Val(....)".

Da te volevo la conferma che il "Codicei Articolo", così come è gestito da voi, fosse "NUMERICO".
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. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [excel] - unione dati di file diversi con codice univoco

Postdi ricky53 » 11/04/11 23:41

Ciao,
ecco le modifiche che tengono conto di quanto abbiamo concordato.
Codice: Seleziona tutto
Option Explicit
Option Base 1
Option Compare Text
Private I As Long, J As Long, K As Integer, L As Integer, X As Integer, UR1 As Long, UC1 As Integer, UC2 As Integer, UR2 As Long
Private WsIn1 As Worksheet, WsIn2 As Worksheet, WsOut As Worksheet, WsSca As Worksheet
Private RangeIn1 As Range, RangeIn2 As Range, RangeOut As Range, RangeSca As Range
Private MatriceIn1(), MatriceIn2(), MatriceOut(), MatriceSca()

Sub Copia_Articoli_da_più_Fogli()
    Dim Inizio As Double
    Dim Fine As Double
    Inizio = Timer
    Application.ScreenUpdating = False
    Application.Calculation = xlManual
   
    Set WsIn1 = Sheets("Listino")
    Set WsIn2 = Sheets("Offerte")
    Set WsOut = Sheets("Finale")
    Set WsSca = Sheets("Scartati")
       
    UR1 = WsOut.Range("A" & Rows.Count).End(xlUp).Row
    UR2 = WsSca.Range("A" & Rows.Count).End(xlUp).Row
   
'    UC1 = WsIn1.Range("A1").End(xlToRight).Column ' <<------- se si vogliono avere tutte le colonne
    UC1 = 22 ' <<------- se si vogliono avere le colonne fino alla "V"
       
    UC2 = WsIn2.Range("A1").End(xlToRight).Column
       
    If UR1 >= 2 Then
        WsOut.Range(WsOut.Cells(2, 1), WsOut.Cells(UR1, UC1)).ClearContents
    End If
       
    If UR2 >= 2 Then
        WsSca.Range("A2", WsSca.Cells(UR2, UC1)).ClearContents
    End If
       
    UR1 = WsIn1.Range("A" & Rows.Count).End(xlUp).Row
'-------------------------------
    Cancella_Dati_Colonna_T
'-------------------------------
    UR1 = WsIn1.Range("A" & Rows.Count).End(xlUp).Row
    Set RangeIn1 = WsIn1.Range(WsIn1.Cells(2, 1), WsIn1.Cells(UR1, UC1))
' Ordinamento per "Codice Articolo"  Crescente
    RangeIn1.Sort Key1:=WsIn1.Range("A2"), Order1:=xlAscending, Header:= _
        xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
    MatriceIn1 = RangeIn1
       
    UR2 = WsIn2.Range("A" & Rows.Count).End(xlUp).Row
    Set RangeIn2 = WsIn2.Range(WsIn2.Cells(2, 1), WsIn2.Cells(UR2 + 1, UC2))
' Ordinamento per "Codice Articolo"  Crescente
    RangeIn2.Sort Key1:=WsIn2.Range("A2"), Order1:=xlAscending, Header:= _
        xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
    MatriceIn2 = RangeIn2
       
' Aggiunte "4" colonne di "Offerte"
    ReDim MatriceOut(UR1 + UR2, UC1 + 4)
       
    ReDim MatriceSca(UR2, UC2)
       
    WsIn1.Range("A1:V1").Copy
    WsOut.Range("A1").PasteSpecial xlPasteValues
    WsOut.Range("W1") = WsIn2.Range("E1")
    WsOut.Range("X1") = WsIn2.Range("K1")
    WsOut.Range("Y1") = WsIn2.Range("L1")
    WsOut.Range("Z1") = WsIn2.Range("M1")
    WsIn2.Range("A1:O1").Copy
    WsSca.Range("A1").PasteSpecial xlPasteValues
       
    K = 0: L = 0
    J = 1
    For I = 1 To UR1 - 1
Continua:
        If Val(MatriceIn1(I, 1)) > Val(MatriceIn2(J, 1)) And MatriceIn2(J, 1) <> "" Then
' Articolo di "2" non presente su "1"
            Scrivi_Dati_Maggiori
            J = J + 1
            GoTo Continua
        Else
            If Val(MatriceIn1(I, 1)) = Val(MatriceIn2(J, 1)) Then
                Scrivi_Dati_Uguali
                J = J + 1
            Else
' Articolo di "1" non presente su "2"
                Scrivi_Dati_Minori
            End If
        End If
    Next I
    If Val(MatriceIn1(UR1 - 1, 1)) < Val(MatriceIn2(J, 1)) Then
' Restanti Articoli di "2" non presenti su "1"
        Scrivi_Restanti_di_2
    End If
       
    Set RangeOut = WsOut.Range(WsOut.Cells(2, 1), WsOut.Cells(UBound(MatriceOut), UC1 + 4))
       
' La colonna "V" ("22") contiene più di 225 caratteri, vanno eliminati quelli oltre i 255
    J = 22
    For I = 1 To UBound(MatriceOut)
        If Len(MatriceOut(I, 22)) > 255 Then
            MatriceOut(I, 22) = Left(MatriceOut(I, 22), 255)
        End If
    Next I
    RangeOut = MatriceOut
    WsOut.Select
    Columns("T:T").NumberFormat = "0"
    Columns("V:V").WrapText = True
    Columns("V:V").ColumnWidth = 50
    Cells.EntireRow.AutoFit
    Cells.VerticalAlignment = xlCenter

    Set RangeSca = WsSca.Range(WsSca.Cells(2, 1), WsSca.Cells(UBound(MatriceSca), UC2))
    RangeSca = MatriceSca
       
    Application.ScreenUpdating = True
    Application.Calculation = xlAutomatic
    Fine = Timer
    MsgBox "Elaborazione Terminata. Tempo impegato per l'elaborazione:  " & Round(Fine - Inizio, 3)
End Sub

Sub Scrivi_Dati_Maggiori()
' Articolo di "2" non presente su "1"
    L = L + 1
    For X = 1 To UC2
        MatriceSca(L, X) = MatriceIn2(J, X)
    Next X
End Sub

Sub Scrivi_Dati_Uguali()
    K = K + 1
    For X = 1 To UC1
        MatriceOut(K, X) = MatriceIn1(I, X)
    Next X
       
    MatriceOut(K, UC1 + 1) = MatriceIn2(J, 5)
    MatriceOut(K, UC1 + 2) = MatriceIn2(J, 11)
    MatriceOut(K, UC1 + 3) = MatriceIn2(J, 12)
    MatriceOut(K, UC1 + 4) = MatriceIn2(J, 13)
End Sub

Sub Scrivi_Dati_Minori()
' Articolo di "1" non presente su "2"
    K = K + 1
    For X = 1 To UC1
        MatriceOut(K, X) = MatriceIn1(I, X)
    Next X
End Sub

Sub Scrivi_Restanti_di_2()
' Ulteriori Articoli di "2" non presenti su "1"
    Do While J < UR2
        Scrivi_Dati_Maggiori
        J = J + 1
    Loop
End Sub

Sub Cancella_Dati_Colonna_T()
    Sheets("Cancellati da Listino").Select
    Cells.Clear
   
    WsIn1.Rows("1:1").Copy
    Rows("1:1").Select
    ActiveSheet.Paste
   
    WsIn1.Select
    Selection.AutoFilter Field:=1, Criteria1:="<>"
    WsIn1.ShowAllData
    Selection.AutoFilter Field:=20, Criteria1:="-"
   
    WsIn1.Range(WsIn1.Cells(2, 1), WsIn1.Cells(UR1, UC1)).Copy ' Cut
    Sheets("Cancellati da Listino").Select
    Range("A2").Select
    ActiveSheet.Paste
    Cells.WrapText = False
   
    WsIn1.Select
    Rows("2:2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Delete Shift:=xlUp
    ActiveSheet.ShowAllData
    [A1].Select
End Sub


Alcune spiegazioni:
1. copia la macro in un "Modulo"
2. inserisci i fogli "Finale", "Scartati" e "Cancellati da Listino"
3. copia il file con i dati del listino nel foglio "LISTINO"
4. copia il file con i dati delle offerte nel foglio "OFFERTE"

Esegui la macro "Copia_Articoli_da_più_Fogli"
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. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [excel] - unione dati di file diversi con codice univoco

Postdi ricky53 » 12/04/11 06:53

Ciao,
ATTENZIONE: il file "PROMO" ha la cella "C1" vuota !!!
Questa situazione non fa calcolare bene il valore della variabile "UC2" nell'istruzione
Codice: Seleziona tutto
UC2 = WsIn2.Range("A1").End(xlToRight).Column

che deve contenere il numero di colonne del file.

Per risolvere scrivi qualcosa in questa cella
oppure
sostituisci l'istruzione precedente con
Codice: Seleziona tutto
UC2 = 15
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. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [excel] - unione dati di file diversi con codice univoco

Postdi leotaglia » 12/04/11 07:22

ciao,
Anche scrivendo in C1 ottengo errore di run time "9":
indice fuori misura
se clicco su debug mi evidenzia la riga: Set WsIn1 = Sheets("Listino")
Stò provando con mac e excel 2011, dopo provo con win e 2007 o 2003.
Credo che magari sbaglio qualcosa io.
http://dl.dropbox.com/u/16894450/prova% ... 120411.xls
grazie,
Leo
leotaglia
Utente Junior
 
Post: 11
Iscritto il: 09/04/11 01:12

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "[excel] - unione dati di file diversi con codice univoco":


Chi c’è in linea

Visitano il forum: enrico43 e 9 ospiti