Allora, sulla base delle informazioni carpite via mp do' la mia traduzione di quanto richiesto (ad uso di tutto il forum) e la mia risposta.
Problema:
-avendo un archivio di circa 50*6000 di numeri da 1 a 90, voglio vedere visivamente la posizione di 6 numeri impostati dall' utente, tramite una colorazione.
-richiesta ulteriore: vorrei vedere ogni numero colorato con un suo colore diverso, calcolato sulla base del valore del numero.
Risposta alla seconda richiesta:
-se hai da identificare 6 numeri nel tabellone, non servono 90 colori, ma ne servono 6.
-e comunque excel fino alla versione 2003 gestisce una palette di 56 diversi colori, a 90 non ci arrivera' mai. Nella versione 2007 ne gestisce "qualche milione"; ma lo schermo quante tonalita' e' capace di rendere e l' occhio quante e' capace di coglierne? Molto meno di 90.
-insomma, a colorare ogni cella con un colore calcolato sulla base del numero che si vuole evidenziare le chances di discriminare i numeri diminuiscono drasticamente. Quindi non si aggiunge nulla al risultato, anzi si toglie validita' al risultato.
Cio' detto, e quindi lavorando su 6 colori, la soluzione potrebbe essere questa:
-si inseriscono i 6 numeri cercati nelle celle C3:H3 (ovviamente alcuni possono anche essere lasciati vuoti)
-si inserisce in C4 la formula =SE($B$4=C3;1;0) che poi si copia fino ad H4 modificando pero' il valore "se vero" da 1 (nella formula data) in 2, 3, 4, 5 e 6.
-si mette in B3 la formula =SOMMA(C4:H4)+2
-si usa poi la seguente macro:
- Codice: Seleziona tutto
Sub paint()
[T1] = Timer
For I = 1 To 6
Range("B4").Offset(0, I).Interior.ColorIndex = I + 2
Next I
Range("C6:BE5000").Interior.ColorIndex = xlNone
Application.ScreenUpdating = False
For Each cell In Range("C6:BE5000")
Range("B4").Value = cell.Value
If Range("B3").Value > 2 Then cell.Interior.ColorIndex = Range("B3").Value
Next cell
Application.ScreenUpdating = True
[T2] = Timer
End Sub
Gli indirizzi dati (C3:H3 per i numeri cercati, C6:BE5000 per il tabellone dati, C4:H4, B3, B4, T1, T2 per le celle di servizio) sono coerenti col foglio di biancocandido.
La macro completa il ciclo in circa 30 secondi, su un pc non di ultima generazione.
Per curiosita': sarebbe stato possibile eseguire in vba i calcoli fatti sul foglio (vedi le formule date), ma il tempo di esecuzione peggiora di un fattore di oltre 20; questo vi dovrebbe convincere che quando suggerisco "fate sul foglio excel tutti i calcoli che potete, fate in vba solo quello che rimane" un qualche motivo ci sara' stato.
Come pure: ho aggiunto quasi per curiosita' l' IF Range("B3").Value > 2 Then, che ha dimezzato (da 60 a 30 sec) il ciclo della macro; questo significa che e' moolto piu' veloce eseguire un if che non applicare direttamente il colore a una cella (l' indice calcolato, con la formula in B3 in combinazione con C3:H3, in assenza di corrispondenza con i numeri in ricerca corrisponde al "bianco")
Per chi ha excel 2007, dovrebbe essere piu' facile e piu' rapido usare la formattazione condizionale, come scrissi qui: viewtopic.php?f=26&t=78213#p444667
Spero che qualcuno, compreso biancocandido , possa trarre qualche utile spunto da quanto descritto.
Ciao.