Macro e Formattazione condizionale
Hai un problema con Excel? 
Macro e Formattazione condizionale
di jck (utente non iscritto) data: 06/02/2015 16:29:41
Buongiorno, sono un nuovo utente e in questi giorni sto sperimentando alcune funzioni di excel; sto cercando di avvicinarmi a questo mondo poichè nei colloquio di lavoro mi viene sempre più richiesta una buona conoscenza di Excel, e gli esami che ho sostenuto in università sono stati a dir poco ridicoli.
Comunque, vi chiedo questo aiuto: devo creare una macro che selezioni in verde tutta la riga corrispondente alla casella della colonna E con valore massimo.
Per ottenere questo risultato ho creato una formattazione condizionale inserendo la formula =$E2=MAX($E:$E)
Questa formula funziona perfettamente quando la imposto manualmente da formattazione condizionale, ma se inizio la registrazione di una macro, eseguo tutti i passaggi e concludo la registrazione, una volta che vado a eseguire la macro appena creata l'unico risultato che ottengo è il foglio totalmente selezionato a parte una casella non selezionata.....che cosa devo fare?
incollo qui sotto il testo attuale della mia macro
grazie mille
Sub maxverde()
'
' maxverde Macro
'
'
Cells.FormatConditions.Delete
Cells.Select
Range("G4").Activate
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=$E2=MAX($E:$E)"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.ColorIndex = xlAutomatic
End With
Selection.FormatConditions(1).StopIfTrue = False
End Sub |
di Vecchio Frac data: 06/02/2015 16:39:16
cit. "devo creare una macro che selezioni in verde tutta la riga corrispondente alla casella della colonna E con valore massimo. "
e
cit. "Questa formula funziona perfettamente quando la imposto manualmente da formattazione condizionale"
---> Sono due scenari diversi. Ma a te interessa riprodurre in VBA la creazione di una formattazione condizionale o solo il risultato finale (cioè l'evidenziatura in verde della riga della cella con il valore max) ?
cit. "l'unico risultato che ottengo è il foglio totalmente selezionato a parte una casella non selezionata"
---> è quello che gli hai detto di fare, ma non è esatto pensare che non sia selezionata una casella perchè la cella G4 in effetti è selezionata, la vedi di colore diverso proprio perchè è la cella attiva:
Cells.Select
Range("G4").Activate
di Vecchio Frac data: 06/02/2015 16:46:56
Insomma pensavo a una cosa così, senza passare dalla formattazione condizionale.
Option Explicit
Sub colorize_if_max()
Cells.Interior.ColorIndex = -4142
Range("E:E").Find(Application.Max(Range("E:E")), lookat:=xlWhole).EntireRow.Interior.ColorIndex = 43 'light green
End Sub |
di jck (utente non iscritto) data: 06/02/2015 16:50:01
Io ho la necessità di creare una macro che, una volta eseguita, mi evidenzi in verde tutta la riga corrispondente alla cella della colonna E con valore massimo.
Come posso fare?
grazie!
di jck (utente non iscritto) data: 06/02/2015 16:51:39
Perfetto, grazie mille!!
Un' ultima cosa, con questa macro, se aggiungo dei valori superiori nella colonna e, la riga evidenziata resta la stessa e non si aggiorna...come posso fare?
scusate la mia ignoranza ma mi sto approcciando da poco al mondo di excel!
di Vecchio Frac data: 06/02/2015 16:52:20
Bene, allora ti ho già scritto la soluzione (purtroppo. Avrei dovuto aspettare che lo facessi tu, scusami).
Ora leggi quello che ho scritto io e se non capisci il meccanismo chiedi pure.
di Vecchio Frac data: 06/02/2015 16:53:28
No, non resta evidenziata.
L'istruzione Cells.Interior.ColorIndex = -4142 si preoccupa di ripristinare tutte le celle del foglio al colore iniziale (perdita secca di performances ma non dovrebbe metterci molto).
di jck (utente non iscritto) data: 06/02/2015 16:57:30
Scusami!! non volevo postare 2 volte la mia risposta, sei stato molto gentile! grazie!
Purtroppo se aggiungo un valore superiore a quelli già esistenti nella colonna E, la selezione non si sposta, ma non è un problema! Ti ringrazio nuovamente
di Vecchio Frac data: 06/02/2015 17:00:27
Bè, ma è chiaro che devi lanciare la macro ogni volta se vuoi l'aggiornamento.
Intendevi forse che ad ogni inserimento di un valore la macro deve essere eseguita?
Questa è un'esigenza diversa e ha bisogno di una risposta nuova. Perchè dovrai intercettare l'evento di modifica della cella nel foglio XY e lanciare la macro in automatico.
di jck (utente non iscritto) data: 06/02/2015 17:02:27
Si, infatti, hai ragione....basta lanciare ogni volta la macro e risolvo il mio problema.
Attraverso la formattazione la seleziona restava aggiornata rispetto ai valori, ma non è assolutamente un problema lanciare ogni volta la macro; grazie mille! Gentilissimo!
di Vecchio Frac data: 06/02/2015 17:03:36
Ma la soluzione è semplice, perchè non ci provi?
Preferisci che te la allego così ci rifletti sopra?
di jck (utente non iscritto) data: 06/02/2015 17:05:51
No semplicemente è la prima volta che mi approccio a VBA e non so da che parte guardare; ho più dimestichezza con le formattazioni, ma proprio non so dove sbattere la testa per questo tipo di programmazione!
di Vecchio Frac data: 06/02/2015 17:09:51
Allora ti farà bene prenderci confidenza.
Ti allego la revisione del codice, per farlo funzionare ti basta eliminare il codice precedente e incollare questo nella zona codice del foglio interessato.
Ora appena modifichi valori nella colonna E, istantaneamente la riga verde si sposterà in corrispondenza del valore Max.
‘nel codice del foglio che contiene i dati
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("E:E")) Is Nothing Then Exit Sub
Application.EnableEvents = False
Cells.Interior.ColorIndex = -4142
Range("E:E").Find(Application.Max(Range("E:E")), lookat:=xlWhole).EntireRow.Interior.ColorIndex = 43 'light green
Application.EnableEvents = True
End Sub
|
Vuoi Approfondire?