| | Post: 1 | Registrato il: 22/10/2021
| Città: ISEO | Età: 56 | Utente Junior | office 2010 | | OFFLINE |
|
22/10/2021 12:50 | |
ciao
tramite macro vorrei colorare determinati numeri
di un archivio
nel foglio archivio nelle celle AB1:AI1
scrivo i numeri da ricercare e colorare
premesso che l archivio e in continuo aggiornamento
quindi prima di iniziare la ricerca
si dovrà individuare l ultima riga compilata.
la prima cella per la ricerca e' D3 l ultima colonna BF
mi servirebbe poi, anche una 2da macro x pulire il tutto
vi allego il file
ciao
|
|
| | Post: 22 | Registrato il: 29/04/2021
| Città: CITTADELLA | Età: 62 | Utente Junior | 365/2007 | | OFFLINE | |
|
22/10/2021 14:21 | |
Ciao,
prova questo.
Aggiunto formattazione condizionale per colorare i numeri, ora è gialla.
Vedi regole per cambiare i colori.
Aggiunto macro per cancellare range.
g62 [Modificato da giova62 22/10/2021 14:24] |
| | Post: 23 | Registrato il: 29/04/2021
| Città: CITTADELLA | Età: 62 | Utente Junior | 365/2007 | | OFFLINE | |
|
22/10/2021 14:27 | |
|
| | Post: 1 | Registrato il: 22/10/2021
| Città: ISEO | Età: 56 | Utente Junior | office 2010 | | OFFLINE |
|
22/10/2021 14:44 | |
cio
si', il foglio con format condiz funziona.
ma come descritto mi servirebbe riuscire farlo con macro.
questo fgl fa parte di un file piu complesso
non sto a dilungarmi a descrivere xche xcome...
questo fgl dovrei riuscire a colorare ma con macro.
comunque grazie
ciao
|
| | Post: 6.561 | Registrato il: 14/11/2004
| Utente Master | Office 2019 | | OFFLINE |
|
22/10/2021 15:43 | |
Ciao Angelo ti serve colorare solo il numero oppure il fondo della cella, e d inoltre trattandosi di Ruote tutti i numeri o ruote specifiche.
Ciao By sal (8-D
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui |
| | Post: 1.445 | Registrato il: 27/06/2011
| Utente Veteran | excel 2007 | | OFFLINE |
|
22/10/2021 15:51 | |
ciao a tutti,
la macro del file allegato dovrebbe essere quella che cerchi.
ciao
Frank
vb Sub trova_e_colora()
Dim cerca As Range, trova As Range
Dim cercato As Range, trovato As Object
Dim sh As Worksheet, ur As Long, r As Long
Set sh = Sheets("Archivio")
With sh
Set cerca = .Range("ab1:ai1")
ur = .Cells(Rows.Count, "bf").End(xlUp).Row
Set trova = .Range("d3:bf" & ur)
For Each cercato In cerca
Set trovato = trova.Find(cercato.Value, LookIn:=xlValues, lookat:=xlWhole)
If Not trovato Is Nothing Then
r = trovato.Row
trovato.Font.ColorIndex = 3
trovato.Font.Bold = True
trovato.Interior.Color = vbYellow
Do
Set trovato = trova.FindNext(trovato)
trovato.Font.ColorIndex = 3
trovato.Font.Bold = True
trovato.Interior.Color = vbYellow
Loop While Not trovato Is Nothing And r <> trovato.Row
End If
Next cercato
End With
Set sh = Nothing
Set cerca = Nothing
Set trova = Nothing
Set trovato = Nothing
End Sub
Stretta la foglia, larga la via, dite la vostra che ho detto la mia.
Excel 2007 forse anche 2013 ... 2021 ... 365 e future... |
| | Post: 2 | Registrato il: 22/10/2021
| Città: ISEO | Età: 56 | Utente Junior | office 2010 | | OFFLINE |
|
22/10/2021 15:52 | |
ciao
vorrei colorare lo sfondo del range D3:BF
di tutte le ruote
Es
se in Ab1 scrivi il num 5
vorrei evidenziare tutti i num 5 in tutte le ruote
ciao
|
| | Post: 1.446 | Registrato il: 27/06/2011
| Utente Veteran | excel 2007 | | OFFLINE |
|
22/10/2021 15:56 | |
dai un'occhiata al file del mio precedente post
ciao
Frank
Stretta la foglia, larga la via, dite la vostra che ho detto la mia.
Excel 2007 forse anche 2013 ... 2021 ... 365 e future... |
| | Post: 3 | Registrato il: 22/10/2021
| Città: ISEO | Età: 56 | Utente Junior | office 2010 | | OFFLINE |
|
22/10/2021 16:03 | |
ciao
x frank
tutto ok
perfetta e' cio che cercavo
grazie
|
| | Post: 1.447 | Registrato il: 27/06/2011
| Utente Veteran | excel 2007 | | OFFLINE |
|
22/10/2021 18:21 | |
ciao a tutti,
ciao raimea,
ho modificato la macro e commentato le righe aggiunte/modificate.
Eccola:
vb Sub trova_e_colora()
Dim cerca As Range, trova As Range
Dim cercato As Range, trovato As Object
Dim sh As Worksheet, ur As Long, r As Long
Dim c As Long ' variabile aggiunta
Set sh = Sheets("Archivio")
With sh
Set cerca = .Range("ab1:ai1")
ur = .Cells(Rows.Count, "bf").End(xlUp).Row
Set trova = .Range("d3:bf" & ur)
For Each cercato In cerca
Set trovato = trova.Find(cercato.Value, LookIn:=xlValues, lookat:=xlWhole)
If Not trovato Is Nothing Then
r = trovato.Row
c = trovato.Column ' riga aggiunta
trovato.Font.ColorIndex = 3
trovato.Font.Bold = True
trovato.Interior.Color = vbYellow
Do
Set trovato = trova.FindNext(trovato)
trovato.Font.ColorIndex = 3
trovato.Font.Bold = True
trovato.Interior.Color = vbYellow
'=============================================================
' ***riga modificata***
'ho modificato la riga seguente in quanto se presente lo stesso numero sulla stessa riga,
'non prosegue sulle righe successive
Loop While Not trovato Is Nothing _
And r <> trovato.Row _
Or c <> trovato.Column
'=============================================================
End If
Next cercato
End With
Set sh = Nothing
Set cerca = Nothing
Set trova = Nothing
Set trovato = Nothing
End Sub
Stretta la foglia, larga la via, dite la vostra che ho detto la mia.
Excel 2007 forse anche 2013 ... 2021 ... 365 e future... |
| | Post: 4 | Registrato il: 22/10/2021
| Città: ISEO | Età: 56 | Utente Junior | office 2010 | | OFFLINE |
|
22/10/2021 19:40 | |
ciao
ottimo |
| | Post: 4.763 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Master | Excel 365 | | OFFLINE |
|
23/10/2021 14:05 | |
@tanimon
Frank ma non sarebbe bastato un qualcosa del genere decisamente più semplice?
vb Sub prova()
Dim ur As Long
Dim rng As Range
Dim rng2 As Range
Dim cel As Range
Dim cel2 As Range
ur = Cells(Rows.Count, 1).End(xlUp).Row
Set rng = Range("ab1:ai1")
Set rng2 = Range("D3:BF" & ur)
For Each cel In rng
For Each cel2 In rng2
If cel.Value = cel2.Value Then
cel2.Interior.ColorIndex = 6
cel2.Font.ColorIndex = 3
cel2.Font.Bold = True
End If
Next cel2
Next cel
End Sub
Alfredo |
| | Post: 1.448 | Registrato il: 27/06/2011
| Utente Veteran | excel 2007 | | OFFLINE |
|
23/10/2021 14:29 | |
Ciao a tutti,
Ciao Alfredo,
ai fini del risultato penso proprio che la tua proposta
raggiunga lo stesso della mia , ed in effetti inizialmente
l'avevo pensata come la tua.
Poi in fase di stesura del codice ho cambiato idea, anche perché penso
che la mia, non dovendo passarsi ogni cella del ciclo interno, sia più veloce (forse),
ma non ho provato ed ora sto scrivendo dal cellulare e non ho un PC per provare.
Se hai tempo,
prova tu e fammi sapere.
Ciao
Frank
Stretta la foglia, larga la via, dite la vostra che ho detto la mia.
Excel 2007 forse anche 2013 ... 2021 ... 365 e future... |
| | Post: 4.764 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Master | Excel 365 | | OFFLINE |
|
23/10/2021 15:45 | |
Ciao Frank
Sicuramente il metodo Find è più efficace in termini di velocità dei cicli.
Ma secondo me molto dipende dalla mole dei dati da elaborare e, ovviamente, ho provato pure la tua e sul mio pc per il caso in questione le due procedure sono entrambe istantanee.
A mio avviso la mia è più semplice da comprendere rispetto alla tua da parte dell’utente che la deve utilizzare sempre che ne abbia interesse e voglia (ma su questo ho più di un dubbio).
Alfredo |
| | Post: 1.449 | Registrato il: 27/06/2011
| Utente Veteran | excel 2007 | | OFFLINE |
|
23/10/2021 16:40 | |
alfrimpa, 23/10/2021 15:45:
A mio avviso la mia è più semplice da comprendere rispetto alla tua da parte dell’utente che la deve utilizzare
ciao Alfredo,
su questo concordo pienamente
e la mole di dati da verificare è determinante per le strategie da adottare.
Sono riuscito a trovare tempo per fare alcune prove sulle due macro che abbiamo elaborato ed allego il file con entrambe e per le quali,
per ridurre all'osso perdite di tempo nell'esecuzione,
ho posto attenzione a lasciare il minor numero di righe vuote
inserendo anche tre istruzioni per ripristinare lo stato delle celle verificate durante l'elaborazione precedente.
In alto ci sono due bottoni con i nostri nomi ed ad ognuno ho abbinato la macro relativa.
Con la funzione Timer, si ottengono tempi molto differenti e rilevanti.
Salvo errori,
la tua impiega poco meno del doppio: 31 centesimi di secondo contro 16 centesimi.
Ciao
Frank
Stretta la foglia, larga la via, dite la vostra che ho detto la mia.
Excel 2007 forse anche 2013 ... 2021 ... 365 e future... |
| | Post: 6.563 | Registrato il: 14/11/2004
| Utente Master | Office 2019 | | OFFLINE |
|
23/10/2021 16:59 | |
Ciao Frank ed Alfredo, credo che usando i cicli il tempo sia lo stesso, la variazione di qualche centesimo di secondo, questa la mia Soluzione
Sub Colora()
Dim r, c, d, x, y, t, tt, Tbl1, Tbl2
t = Now
Tbl1 = Range("AB1:AI1")
r = Cells(Rows.Count, 1).End(xlUp).Row
Set Tbl2 = Range("D3:BF" & r)
With Tbl2
.Interior.Color = RGB(255, 255, 255)
.Font.Color = RGB(0, 0, 0)
.Font.Bold = False
End With
For x = 1 To UBound(Tbl1, 2)
If Tbl1(1, x) = "" Then GoTo 1
d = Tbl1(1, x)
For Each y In Tbl2
If d = y Then
With y
.Interior.Color = RGB(255, 255, 0)
.Font.Bold = True
.Font.Color = RGB(255, 0, 0)
End With
End If
Next y
1 Next x
tt = Now - t
MsgBox "Operazione Terminata" & Chr(13) & Chr(13) & "Tempo Impiegato" & Chr(13) & Chr(13) & _
Format(tt, "hh:mm:ss"), vbInformation, "Ricerca Numeri"
End Sub
Sub Pulisce()
Dim r, Tbl2
r = Cells(Rows.Count, 1).End(xlUp).Row
Set Tbl2 = Range("D3:BF" & r)
With Tbl2
.Interior.Color = RGB(255, 255, 255)
.Font.Color = RGB(0, 0, 0)
.Font.Bold = False
End With
End Sub
di media 1 secondo, senza usare "ScrrenUpdating", per avere una velocità maggiore le estrazioni si dovrebbero trasformare in tabella, ma poi cambierebbero le intestazioni come sapete le tabelle devono avere un intestazione per ogni colonna, ma poi in definitiva si tratterebbe di qualche millesimo.
ho inserito anche un ciclo per la pulizia dei dati precedenti nel caso cambiassero i numeri di ricerca.
allego anche il file.
Ciao By Sal (8-D
[Modificato da by sal 23/10/2021 17:18] se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui |
| | Post: 1.450 | Registrato il: 27/06/2011
| Utente Veteran | excel 2007 | | OFFLINE |
|
23/10/2021 17:35 | |
ciao Salvatore, bella anche la tua con il mio pc impiega 2 secondi, ma al di là del tempo impiegato, quello che mi piace poco non è il For Each interno sul range da colorare, ma L'If che confronta le due celle. con il find: 2 istruzioni - esegue il For Each esterno su pochi valori - esegue il Find con due For Each: 3 istruzioni - esegue il For Each esterno su pochi valori - esegue il For Each interno su MOLTI valori - esegue l'If per verificare i due valori dei due For Each Credo che il Find sia più veloce a trovare la cella con il valore cercato, piuttosto che scorrere tutto il range da verificare confrontando il valore di ogni cella con il valore cercato. Ma come abbiamo già detto parliamo di "aria fritta", e riuscendoci solo raramente, per quanto mi riguarda si tratta solamente della ricerca della soluzione più vicina alla perfezione che riesco a concepire. ciao Frank
Stretta la foglia, larga la via, dite la vostra che ho detto la mia.
Excel 2007 forse anche 2013 ... 2021 ... 365 e future... |
| | Post: 6.564 | Registrato il: 14/11/2004
| Utente Master | Office 2019 | | OFFLINE |
|
23/10/2021 17:50 | |
Ciao Frank, la ricerca è un fattore complesso, però posso assicurarti che l'uso delle Tabelle riduce di molto la ricerca.
ultimamente usando le tabelle per la ricerca di ambi con l'archivio di oltre 16000 record con 8 numeri, e gli ambi di tutti i 90 numeri che sono oltre 4000, per sapere il numero di ambi presenti nell'archivio, ci mette quasi 2 secondi se non di meno.
mentre normalmente siamo nell'ordine di minuti, con i cicli.
però come ho detto nel caso attuale, non l'ho potuto usare in quanto so che Raimea non gli piace sconvolgere l'impostazione, perche anche se ha postato 1 solo foglio quello fa parte di un progetto più grande con molti fogli, quindi una modifica qui dovrebbe modificare anche altri fogli del suo progetto.
Ciao Salvatore
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui |
| | Post: 5 | Registrato il: 22/10/2021
| Città: ISEO | Età: 56 | Utente Junior | office 2010 | | OFFLINE |
|
24/10/2021 06:41 | |
ciao
confermo quanto scritto sopra |
| | Post: 1.451 | Registrato il: 27/06/2011
| Utente Veteran | excel 2007 | | OFFLINE |
|
24/10/2021 13:07 | |
Ciao a tutti,
ed un saluto a Salvatore, Alfredo e Raimea,
allego nuovo file con matrice sul range da evidenziare,
pulisce dalla elaborazione precedente e per 8 numeri da cercare sulle 217 righe,
impiega circa 30 centesimi di secondo.
ciao
Frank
Stretta la foglia, larga la via, dite la vostra che ho detto la mia.
Excel 2007 forse anche 2013 ... 2021 ... 365 e future... |
| | Post: 4.765 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Master | Excel 365 | | OFFLINE |
|
24/10/2021 15:31 | |
Salve a tutti.
Quando rispondo ad un quesito su un forum mi pongo sempre la domanda: Ma l'utente, al di là della risoluzione del problema, capirà il significato del codice che gli sto proponendo?"
La risposta che mi do, nella stragrande maggioranza dei casi, è No!
Per cui, ancorchè Excel ed ancor di più il VBA consentano a fronte di specifico problema una varietà di soluzioni, io cerco di dare quella che a mio giudizio offre le minori difficoltà ai fini della comprensione del codice da parte di chi lo userà.
A mio modo di vedere i forum su Excel (o altri software) non devono essere dei juke-box su cui premi un bottone (quello dell'invio di un quesito) e nel giro di pochi minuti ricevi una soluzione, che si funziona, ma che probabilmente non capirai mai se non ci metti un minimo di impegno.
Alfredo |
| | Post: 1.452 | Registrato il: 27/06/2011
| Utente Veteran | excel 2007 | | OFFLINE |
|
24/10/2021 16:10 | |
alfrimpa, 24/10/2021 15:31:
A mio modo di vedere i forum su Excel (o altri software) non devono essere dei juke-box su cui premi un bottone (quello dell'invio di un quesito) e nel giro di pochi minuti ricevi una soluzione, che si funziona, ma che probabilmente non capirai mai se non ci metti un minimo di impegno.
Ciao a tutti,
a mio avviso,
in un Forum più partecipanti e più proposte di soluzione ci sono,
e più possibilità ho di imparare.
Ovviamente se ho interesse a farlo...
Ciao
Frank
Stretta la foglia, larga la via, dite la vostra che ho detto la mia.
Excel 2007 forse anche 2013 ... 2021 ... 365 e future... |
| | Post: 4.766 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Master | Excel 365 | | OFFLINE |
|
24/10/2021 16:27 | |
tanimon, 24/10/2021 16:10:
Ciao a tutti,
a mio avviso,
in un Forum più partecipanti e più proposte di soluzione ci sono,
e più possibilità ho di imparare.
Ovviamente se ho interesse a farlo...
Ciao
Frank
Questo sicuramente solo che io partirei dalle opzioni più "semplici".
Alfredo |
| | Post: 6.566 | Registrato il: 14/11/2004
| Utente Master | Office 2019 | | OFFLINE |
|
24/10/2021 16:27 | |
Ciao Alfredo, conosci la mia posizione riguardo i forum e le risposte ed anche il crossposting, sono anche cosciente del tuo sforzo che fai a tutti i livelli, per far comprendere Excel cercando di inculcarlo.
ma renditi conto che solamente chi ha spirito di conoscenza oppure voglia di apprendere, cercherà di capire quello che gli proponi, ma non per sua volontà, perche ormai le cose vanno in questo modo in tutto il mondo, la tecnologia corre troppo veloce, e la maggioranza delle persone non si pone nemmeno il problema, ormai con le "APP" basta scaricarle per avere tutto quello che si vuole, nessuno si pone il problema di come crearle, quindi perche impegnarsi a capire un foglio di lavoro, che si userà al massimo per un elenco o per ricordare degli eventi, solo chi lo userà per lavoro e riusce a vedere che con una Formula oppure un poco di VBA risparmierà tempo al lavoro avrà la tua attenzione.
le persone non impareranno mai niente per forza, e quelli che lo faranno lo dimenticano appena non gli serve più
e veniamo ad i nostri Forum, basta interrogare il WEB per avere tutte le soluzioni possibili al problema momentaneo che uno ha con il foglio elettronico, solamente un poco di fastidio per la ricerca, ma una volta che ha trovato la soluzione al suo momentaneo problema, il discorso è chiuso, si aspetta al prossimo problema, senza aver appreso niente, lo troverà lo stesso la prossima volta.
Inoltre nel caso del VBA, come il mio con le FORMULE, non entreranno nella sua testa, infatti molte volte chiedo aiuto con le Formule appena diventano un poco più complesse.
anche io molte volte, ma solamente, quanto mi accorgo che la persona è interessata al processo, allora mi dilungo nelle spiegazioni, nella speranza che chieda altre cose per allargare la sua conoscenza.
Ciao By Sal (8-D se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui |
| | Post: 1.453 | Registrato il: 27/06/2011
| Utente Veteran | excel 2007 | | OFFLINE |
|
24/10/2021 16:47 | |
Anche se solo tramite Forum,
conosco Salvatore ed Alfredo da tanto di quel tempo
che mi è impossibile non salutarli con affetto.
Non vorrei comunque che il post #20 perdesse visibilità.
Ciao
Frank
Stretta la foglia, larga la via, dite la vostra che ho detto la mia.
Excel 2007 forse anche 2013 ... 2021 ... 365 e future... |
|
|