Aiutamici Forum
Benvenuto Ospite Cerca | Topic Attivi | Utenti | | Log In | Registra

[Excel]: Confronto di dati di 2 tabelle Opzioni
aetio
Inviato: Friday, May 28, 2010 6:52:03 PM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao a tutti, ho un problema che non sono riuscito a risolvere, nonostante abbia cercato e ricercato la soluzione nel web: in una pagina .XLS ho due tabelle, la prima di 55 colonne e la seconda di 25. In ogni riga viene catalogato un prodotto ed ogni valore delle 55+25 colonne è riferito a quel prodotto, nella riga di sua competenza. Devo trovare per ogni prodotto (quindi per ogni riga) quali dei 25 valori della seconda tabella sono presenti anche nella prima. Non m'importa quante volte un dato valore sia presente nella riga, l'importante è che sia presente. Ad esempio:
-Riga1 relativa al prodotto X: prima tabella da colonna A a BC/ seconda tabella da colonna BD a CB
-Riga2 relativa al prodotto Y: prima tabella da colonna A a BC/ seconda tabella da colonna BD a CB
-Riga3 relativa al prodotto Z: prima tabella da colonna A a BC/ seconda tabella da colonna BD a CB
etc.
nella Riga2 della seconda tabella leggo:
4 5 12 16 23 44 48 51 55 58 62 63 67 69 69 70 73 74 77 80 81 84 87 88 88

Sempre nella Riga2, ma della prima tabella leggo:
4 5 6 8 10 13 14 15 16 19 19 20 22 22 25 25 33 34 35 35 36 37 38 38 39 41 42 42 44 48 49 54 56 57 59 59 63 63 64 65 68 71 71 76 77 79 79 81 82 82 83 83 86 87 89

i valori della seconda tabella presenti anche nella prima sono:
4 5 16 44 48 63 77 81 87

Questi valori vorrei che mi venissero restituiti nella riga di competenza del prodotto, vale a dire la Riga2, a partire da colonna CC.

Dato che il foglio ha circa 2500 righe, capite quanto sia importante per me risovere questo problema... :)
Grazie inifinte per i suggerimenti....
Sponsor
Inviato: Friday, May 28, 2010 6:52:03 PM

 
a10n11
Inviato: Friday, May 28, 2010 7:50:30 PM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
salve
Spero che tu possa immaginare il numero di iterazioni che necessitano per controllore 55 numeri per 25 volte per 2500 righe.
Spero anche che tu abbia un processore piuttosto svelto.
Spero anche che non serva (ma lo sospetto) per elaborazione dei numeri del lotto.
dopo aver sperato tanto, quella che segue è una macro che effettua il mare di cicli di comparazione.:

Sub confronta()
Dim colonna As Integer
For n = 1 To Cells(1, 1).End(xlDown).Row
colonna = 81
Set area1 = Range(Cells(n, 56), Cells(n, 80))
Set area2 = Range(Cells(n, 1), Cells(n, 55))
For Each cl In area1
For Each cl2 In area2
If cl = cl2 Then
Cells(n, colonna).Value = cl.Value
colonna = colonna + 1
End If
Next cl2
Next cl
Set area = Nothing
Set area2 = Nothing
Next n
End Sub
saluti
Giap

aetio
Inviato: Friday, May 28, 2010 8:00:16 PM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
a10n11 ha scritto:
salve
Spero che tu possa immaginare il numero di iterazioni che necessitano per controllore 55 numeri per 25 volte per 2500 righe.
Spero anche che tu abbia un processore piuttosto svelto.
Spero anche che non serva (ma lo sospetto) per elaborazione dei numeri del lotto.
dopo aver sperato tanto, quella che segue è una macro che effettua il mare di cicli di comparazione.:

ahahahahAHAHAHAHA... :))))) no, non è per il lotto ... per fortuna mi serve per il mio lavoro.
Scusa la mia immensa ignoranza: anziché applicare la macro a tutta la tabella in un fiato solo, potrei creare un ciclo di comparazione relativo a un centinaio di righe per volta? Così il lavoro sarebbe alquanto alleggerito...
Comunque: GRAZIE infinite!! Non so cosa darei per essere bravo come te a "lavorarti" Excel.... complimenti.
a10n11
Inviato: Friday, May 28, 2010 8:11:09 PM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
aetio ha scritto:
a10n11 ha scritto:
salve
Spero che tu possa immaginare il numero di iterazioni che necessitano per controllore 55 numeri per 25 volte per 2500 righe.
Spero anche che tu abbia un processore piuttosto svelto.
Spero anche che non serva (ma lo sospetto) per elaborazione dei numeri del lotto.
dopo aver sperato tanto, quella che segue è una macro che effettua il mare di cicli di comparazione.:

ahahahahAHAHAHAHA... :))))) no, non è per il lotto ... per fortuna mi serve per il mio lavoro.
Scusa la mia immensa ignoranza: anziché applicare la macro a tutta la tabella in un fiato solo, potrei creare un ciclo di comparazione relativo a un centinaio di righe per volta? Così il lavoro sarebbe alquanto alleggerito...
Comunque: GRAZIE infinite!! Non so cosa darei per essere bravo come te a "lavorarti" Excel.... complimenti.



salve
cambia questa riga per blocchi di 100 righe per volta

For n = 1 To 100

per il primo blocco

For n = 101 to 200
per il secondo blocco
e via di seguito.
saluti
Giap

aetio
Inviato: Friday, May 28, 2010 11:26:35 PM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Grandissimo lavoro... funziona alla grande!!
Grazie infinite, sei un grande ;)
ezio
a10n11
Inviato: Saturday, May 29, 2010 12:20:14 PM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
salve
lieto di esserti stato utile.
Il codice proposto in fondo è di per sè piuttosto banale, è la quantità di dati da elaborare che lo rendono pesante.
saluti
Giap

aetio
Inviato: Saturday, May 29, 2010 2:08:00 PM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Commenta:

Il codice proposto in fondo è di per sè piuttosto banale,
...Gulp!! alla faccia del piuttosto banale :) :)) :)))

Commenta:
è la quantità di dati da elaborare che lo rendono pesante.
... ho provato ad applicarlo a tutte le 2500 righe delle tabelle con la macro integrale e ha impiegato una manciatina di secondi ad arrivare alla fine... Ecco il mio amichetto: Pentium(R) Dual-Core CPU E5200 @ 2.50GHz// 2.50 GHz // 2,00 GB di RAM

Grazie ancora, mi hai risolto un grosso problema...
aetio
Inviato: Tuesday, June 01, 2010 8:59:41 AM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ho un altro quesito "da intenditori" da sottoporre e lo aggiungo qui, perché si riferisce alle tabelle di cui sopra e quindi è inutile aprire un altro 3d... ;)
Devo fare una relazione esplicativa, da discutere durante una riunione, in cui devo evidenziare in modo rapido ed evidente il risultato dei dati rilevati, vale a dire: usando le due tabelle di cui sopra- senza quindi creare una terza tabella che contenga i risultati della ricerca, tabella troppo dispersiva durante una riunione...- dovrei rendere immediatamente visibili all'occhio dell'esaminatore i valori della seconda tabella che hanno soddisfatto la nostra analisi, cioè i valori presenti anche nella prima tabella. Il tutto rimanendo in seconda tabella, senza modificarne nulla, tranne il colore delle celle di appartenenza che diventerebbero gialle, quindi moto visibili a colpo d'occhio, senza dover fare ragionamenti (siamo in una riunione)....
Un esempio:
in tabella uno alla riga 357 ho:
3 4 6 7 9 10 11 12 13 19 19 20 21 21 22 22 24 31 32 33 35 37 38 38 38 38 39 41 41 43 44 45 45 45 46 49 51 51 53 53 56 57 64 65 66 66 68 70 76 79 82 83 83 83 86
in tabella 2, sempre alla riga 357 ho:
72 39 84 43 20 65 24 8 27 76 12 31 69 57 76 31 80 64 23 68 12 16 61 4 72
Le quantità, nella seconda tabella, che sono in comune con la prima tabella sono:
39, nella 2^ colonna della seconda tabella
43, nella 4^ colonna della seconda tabella
20, nella 5^ colonna della seconda tabella
65, nella 6^ colonna della seconda tabella
24, nella 7^ colonna della seconda tabella
12, nella 11^ e 21^ colonna della seconda tabella
31, nella 12^ e 16^ colonna della seconda tabella
57, nella 14^ colonna della seconda tabella
76, nella 10^ e 15^ colonna della seconda tabella
64, nella 18^ colonna della seconda tabella
68, nella 20^ colonna della seconda tabella
4, nella 24^ colonna della seconda tabella
Queste celle devono colorarsi di giallo, di fatto immediatamente visibili anche agli occhi di un ehm!!... somaro ahahaha.

So che è arduo, ma è certamente risolvibile, non certo però da un cipparolo di excel come me ahahahaha .... ;)
Un Grazie sincero anticipato per l'aiuto...
eZio.
a10n11
Inviato: Tuesday, June 01, 2010 9:41:30 AM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
salve
non ho ben capito se devi eveidenziare le ricorrenze uguali in entrambe le tabelle.
questa è comunque la macro che evidenzia entrambe le tabelle:

Code:

Sub confronta()
Dim colonna As Integer
For n = 1 To Cells(1, 1).End(xlDown).Row
colonna = 81
Set area1 = Range(Cells(n, 56), Cells(n, 80))
Set area2 = Range(Cells(n, 1), Cells(n, 55))
For Each cl In area1
For Each cl2 In area2
If cl = cl2 Then
'questa istruzione evidenzia la seconda tabella
cl.Interior.ColorIndex = 3
'questa istruzione evidenzia la prima tabella
cl2.Interior.ColorIndex = 3
Cells(n, colonna).Value = cl.Value
colonna = colonna + 1
End If
Next cl2
Next cl
Set area = Nothing
Set area2 = Nothing
Next n
End Sub

saluti
Giap

aetio
Inviato: Tuesday, June 01, 2010 10:24:12 AM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
a10n11 ha scritto:
salve
non ho ben capito se devi eveidenziare le ricorrenze uguali in entrambe le tabelle.
questa è comunque la macro che evidenzia entrambe le tabelle:

Ciao, innanzi tutto Grazie assai, non so proprio come sdebitarmi con te per questo tuo immenso aiuto che mi risolve alcuni problemi importanti: sono una frana in excel (mi piace molto, ma non ne so quasi nulla di come "lavorarmelo" a dovere usando tutte le sue enormi potenzialità... mi limito alle formule più semplici che riesco a trovare in rete, ma nulla di più sob!!..). Se ti può interessare qualcosa di aeronautica, lì invece sono "abbastanza" addentrato [sono un pilota] e poteri soddisfare qualche tuo interrogativo a tal riguardo (se vuoi dai un'occhiata al tubo, utente aetio2, ci sono dei miei video al simulatore semplici, ma molto interessanti...). Ma veniamo al dunque :) a me interessa principalmente evidenziare nella seconda tabella i dati che sono anche presenti nella prima senza però toccare alcun dato della tabella, salvo il colore delle celle in cui ci sono i dati presenti anche nella prima.... ma nulla mi vieta di colorare anche i dati della prima tabella. :)
di nuovo Grazie assai...
eZio

a10n11
Inviato: Tuesday, June 01, 2010 10:35:19 AM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
aetio ha scritto:

Se ti può interessare qualcosa di aeronautica, lì invece sono "abbastanza" addentrato [sono un pilota] e poteri soddisfare qualche tuo interrogativo a tal riguardo (se vuoi dai un'occhiata al tubo, utente
eZio


salve
se potessi tornare a 20 anni la cosa mi avrebbe stuzzicato anche parecchio. ora mi accontento di seguire da terra
le evoluzioni dello yakitalia e di alcuni amici paracadutisti all'aeroporto di Fano.
saluti
Giap

aetio
Inviato: Tuesday, June 01, 2010 11:13:17 AM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
a10n11 ha scritto:

ora mi accontento di seguire da terra
le evoluzioni dello yakitalia e di alcuni amici paracadutisti all'aeroporto di Fano.
saluti
Giap

YAKItalia...gran bel team... sono venuto a Fano non molto tempo fa. Un bell'aeroporto, speriamo che i soliti comitati "antiaeroporto" non lo distruggano... per fare posto ai soliti palazzi... C'è anche il Pilatus che è un vero e proprio ascensore, 'sti svizzeri.
EDIT: La tabella è semplicemente... PERFETTA! Gulp!!
per evidenziare ancora di più i dati che m'interessano sarebbe davvero il massimo contornare queste celle (ma solo queste) con il bordo più spesso, l'ultimo nel comando dei bordi, vale a dire quello di 4^col. 3^riga). Che stringa, e in che posizione, dovrei aggiungere nella macro?
saluti, Grazie e complimenti per il tuo Avatar ;)
eZio
aetio
Inviato: Tuesday, June 01, 2010 6:40:15 PM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ecco la soluzione al problema:




Sub confronta()
Application.ScreenUpdating = False
Dim colonna As Integer
For n = 1 To Cells(1, 1).End(xlDown).Row
colonna = 81
Set area1 = Range(Cells(n, 56), Cells(n, 80))
Set area2 = Range(Cells(n, 1), Cells(n, 55))
For Each cl In area1
For Each cl2 In area2
If cl = cl2 Then
With cl
.Interior.ColorIndex = 36
.Borders(xlEdgeLeft).LineStyle = xlContinuous
.Borders(xlEdgeLeft).Weight = xlMedium
.Borders(xlEdgeTop).LineStyle = xlContinuous
.Borders(xlEdgeTop).Weight = xlMedium
.Borders(xlEdgeBottom).LineStyle = xlContinuous
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlEdgeRight).LineStyle = xlContinuous
.Borders(xlEdgeRight).Weight = xlMedium
End With
Cells(n, colonna).Value = cl.Value
colonna = colonna + 1
End If
Next cl2
Next cl
Set area = Nothing
Set area2 = Nothing
Next n
Application.ScreenUpdating = True
End Sub



Ciao!
eZio

a10n11
Inviato: Thursday, June 03, 2010 12:10:12 PM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
aetio ha scritto:
Ecco la soluzione al problema:





With cl
.Interior.ColorIndex = 36
.Borders(xlEdgeLeft).LineStyle = xlContinuous
.Borders(xlEdgeLeft).Weight = xlMedium
.Borders(xlEdgeTop).LineStyle = xlContinuous
.Borders(xlEdgeTop).Weight = xlMedium
.Borders(xlEdgeBottom).LineStyle = xlContinuous
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlEdgeRight).LineStyle = xlContinuous
.Borders(xlEdgeRight).Weight = xlMedium
End With



salve
abbrevia il tutto così:

With cl
.Interior.ColorIndex = 36
.Borders.LineStyle = xlContinuous
.Borders.Weight = xlMedium
End With

saluti
Giap

aetio
Inviato: Thursday, June 03, 2010 12:41:24 PM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
a10n11 ha scritto:

salve
abbrevia il tutto così:

With cl
.Interior.ColorIndex = 36
.Borders.LineStyle = xlContinuous
.Borders.Weight = xlMedium
End With

saluti
Giap



Grande...!!
Non hai idea di quanto ti ammiro, che sai lavorare in Excel a quel livello!!
Saluti e Grazie assai...
eZio
Utenti presenti in questo topic
Guest


Salta al Forum
Aggiunta nuovi Topic disabilitata in questo forum.
Risposte disabilitate in questo forum.
Eliminazione tuoi Post disabilitata in questo forum.
Modifica dei tuoi post disabilitata in questo forum.
Creazione Sondaggi disabilitata in questo forum.
Voto ai sondaggi disabilitato in questo forum.

Main Forum RSS : RSS

Aiutamici Theme
Powered by Yet Another Forum.net versione 1.9.1.8 (NET v2.0) - 3/29/2008
Copyright © 2003-2008 Yet Another Forum.net. All rights reserved.