|
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....
|
|
|
|
|
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
|
|
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.
|
|
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
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Grandissimo lavoro... funziona alla grande!! Grazie infinite, sei un grande ;) ezio
|
|
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
|
|
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...
|
|
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.
|
|
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
|
|
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
|
|
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
|
|
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
YAK Italia...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
|
|
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
|
|
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
|
|
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
|
|
Guest |