Excel e gli applicativi Microsoft Office Selezionare soltanto le celle di in cui agisce la formattazione condizionale

Login Registrati
Stai vedendo 9 articoli - dal 1 a 9 (di 9 totali)
  • Autore
    Articoli
  • #42267 Score: 1 | Risposta

    Alessio Massari

      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

       

      #42270 Score: 0 | Risposta

      vecchio frac
      Senior Moderator
        272 pts

        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).

        #42306 Score: 0 | Risposta

        Alessio Massari

          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

          #42308 Score: 0 | Risposta

          sportale
          Partecipante

            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.
            #42311 Score: 0 | Risposta

            vecchio frac
            Senior Moderator
              272 pts

              Alessio Massari ha scritto:

              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
              #42313 Score: 0 | Risposta

              sportale
              Partecipante

                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.

                #42314 Score: 0 | Risposta

                vecchio frac
                Senior Moderator
                  272 pts

                  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
                  #42315 Score: 0 | Risposta

                  sportale
                  Partecipante

                    E' perfetto!

                    Grazie infinite per l'aiuto.

                    Buona serata

                    #42316 Score: 0 | Risposta

                    vecchio frac
                    Senior Moderator
                      272 pts

                      Bene. Grazie del feedback. Segna pure come risolta   

                    Login Registrati
                    Stai vedendo 9 articoli - dal 1 a 9 (di 9 totali)
                    Rispondi a: Selezionare soltanto le celle di in cui agisce la formattazione condizionale
                    Gli allegati sono permessi solo ad utenti REGISTRATI
                    Le tue informazioni: