› Excel e gli applicativi Microsoft Office › Selezionare soltanto le celle di in cui agisce la formattazione condizionale
-
AutoreArticoli
-
Buonasera,
premetto che non conosco bene il linguaggio VBA per cui avrei bisogno di un vostro aiuto per impostare una Macro in VBA che faccia se seguenti funzioni:
1- Selezionare un intervallo di celle: fin qui ci sono arrivato con il seguente codice: Range("C15:BO15").Select ;
2- Ho applicato da excel una formattazione condizionale che colora di rosso soltanto le celle vuote (specifico che le celle non sono realmente vuote, infatti contengono una formula che come risultato visivo risulta essere vuota, ma il realtà contiene il valore "", derivante da una formula SE(.....).
3- La mia necessità è selezionare con codice VBA soltanto queste celle "vuote" colorate di rosso dalla formattazione condizionale per poi nasconderle, non eliminarle, dal file excel in seguito alla pressione del pulsante a cui ho associato questa macro.
In pratica ho un intervallo c15:BO15 dove alcune celle risultano con un valore numerico, altre risultano vuote in base al verificarsi di una o dell'altra condizione della formula SE seguente: =SE(CONTA.VALORI('Programmazione-aula'!G3)=1;'Programmazione-aula'!G2;"").
Vorrei nascondere le colonne che contengono le celle vuote che ho evidenziato in rosso attraverso una formattazione condizionale.
Spero di essermi spiegato, grazie mille per chi vorrà aiutarmi.
Alessio
Sono diverse le soluzioni possibili, sarebbe utile avere un pezzo di file con lo scenario realistico (e dati fittizi).
Grosso (grossissimo) modo potrebbe funzionare così:
Sub test() Dim r As Range Dim ce As Range Set r = Range("15:15") For Each ce In r If ce.DisplayFormat.Interior.ColorIndex = 3 Then ce.Columns.EntireColumn.Hidden = True End If Next End Sub
Ma il codice potrebbe lavorare meglio non cercando il colore della formattazione condizionale (considerando la proprietà DisplayFormat del range), bensì più efficientemente pescando le celle che soddisfano la condizione (e che è sorgente della formattazione condizionale).
Il codice prodotto dalla Macro registrata dove applico la sola formattazione condizionale dalla quale poi parte la mia domandqa, come eliminare le colonne dove la formattazione condizionale colora le rispettive celle di rosso dato che il valore corrisponde a "".
Sub NascontiColonne() ' ' NascontiColonne Macro ' Range("C15:BO15").Select Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _ Formula1:="""" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Font .Color = -16383844 .TintAndShade = 0 End With With Selection.FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .Color = 13551615 .TintAndShade = 0 End With Selection.FormatConditions(1).StopIfTrue = False End Sub
Non sò se può essere utile.
Ho provato a copiare il codice presente nella precedente email e non funziona sicuramente perchè l'indice colore che ho inserito, ovvero l'attributo .corol non è l'indice colore. Come faccio a sapere l'indice colore preciso se in automatico excel mi mette "xlAutomatic?
Grazie per l'aiuto
Edit by VF: formattato il codice con l'apposito pulsante del menu
Ecco il file su cui stò lavorando.
Devo nascondere le colonne con celle colorate di rosso dalla formattazione condizionale.
Grazie mille.
Allegati:
You must be logged in to view attached files.e non funziona
Bè chiaramente il mio era solo un esempio
Il colore RGB che hai scelto tu è 13551615 e quindi nel mio esempio non si deve testare la proprietà ColorIndex (che è l'indice del colore nella palette in uso) ma Color.
Comunque hai sbagliato a scrivere la condizione della formattazione, non
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:=""""
ma così:Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="="""""
Il mio codice corretto nel test del colore funzionerà:
Sub test() Dim r As Range Dim ce As Range Set r = Range("15:15") For Each ce In r If ce.DisplayFormat.Interior.Color = 13551615 Then ce.Columns.EntireColumn.Hidden = True End If Next End Sub
Funziona perfettamente, grazie!! l'errore era nella regola della formattazione condizionale e nell'indice colore. grazie mille.
Visto che mi ci trovo, se volessi tornare alla condizione di partenza dopo aver applicato il filtro che attiva il codice appena inserito, come potrei fare velocemente?
Ho impostato un altro pulsante chiamato "Ripristina" a cui vorrei associare un comando per tornare alla condizione iniziale, ovvero alle colonne vuote scoperte.
Lei come farebbe? grazie mille davvero.
L'istruzione più sintetica in assoluto è questa:
columns.Hidden = False
che interessa tutte le colonne del foglio. E' comunque rapidissima ma se noti sfarfallamenti o rallentamenti puoi restrinegre alle sole colonne che sicuramente sono nascoste:
range("C:BO").columns.Hidden = false
Bene. Grazie del feedback. Segna pure come risolta
-
AutoreArticoli