Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

colorare numeri

Ultimo Aggiornamento: 24/10/2021 16:47
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 [SM=g27811] , 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

Re:

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 [SM=g27811]
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 [SM=g27811]

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

Re:
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

Re: Re:
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...
Vota: 15MediaObject5,00225 2
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 00:12. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com