Condividi tramite

Colorare una cella in base al valore di un altra cella

Anonimo
2022-09-08T10:47:06+00:00

Salve, ho due colonne (A , B) ognuna composta da 20 righe... Devo fare in modo che se il valore della cella della colonna B sia maggiore di 0 , la rispettiva cella nella stessa riga della colonna A venga colorata.

C'è un modo tramite codice VBA per fare un controllo su queste 20 righe in automatico senza dover impostare la formattazione condizionale per ogni riga? Grazie per le risposte

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

7 risposte

Ordina per: Più utili
  1. Gianfranco55 25,190 Punti di reputazione Moderatore volontario
    2022-09-08T11:03:12+00:00

    ciao

    senza dover impostare la formattazione condizionale per ogni riga?

    ti basta una riga se è sempre lo stesso colore

    esempio

    seleziona le celle da A1 a A20

    formattazione condizionale

    formule

    scrivi

    =$B1>0

    decidi il colore

    applica

    fatto semplice ed indolore😁

    nella formattazione sono importantissimi gli assoluti---$--

    ti allego un file semplicissimo che ho fatto

    con la spiegazione visiva del comportamento della formattazione

    clicca sui pulsanti e vedi (se ti interessa eh! )

    https://www.dropbox.com/s/ouw58dal6jaii3m/Comportamento%20formattazione.xlsm?dl=0

    La risposta è stata utile?

    10+ persone hanno trovato utile questa risposta.
    0 commenti Nessun commento
  2. Eleuterio Tedeschi 18,590 Punti di reputazione Moderatore volontario
    2022-09-08T12:57:47+00:00

    Ho scritto il codice solo perché l'utente l'ha richiesto esplicitamente:

    C'è un modo tramite codice VBA per fare un controllo su queste 20 righe in automatico senza dover impostare la formattazione condizionale per ogni riga?

    ma è giusto l'appunto, per cui diventa:

    Private Sub Worksheet_Change(ByVal Target As Range)

    Dim rngCell As Range

    If Not Intersect(Target, Range("B1:B20")) Is Nothing Then 
    
        For Each rngCell In Target 
    
            If rngCell.Value <> "" And rngCell.Value > 0 And IsNumeric(rngCell.Value) Then 
    
                rngCell.Offset(, -1).Interior.Color = RGB(255, 0, 0) 
    
            Else 
    
                rngCell.Offset(, -1).Interior.Pattern = xlNone 
    
            End If 
    
        Next rngCell 
    
    End If 
    

    End Sub

    😆

    La risposta è stata utile?

    2 persone hanno trovato utile questa risposta.
    0 commenti Nessun commento
  3. Eleuterio Tedeschi 18,590 Punti di reputazione Moderatore volontario
    2022-09-08T12:03:34+00:00

    Ti basta questo semplice codice che devi però inserire nel modulo del foglio e non in uno generico:

    Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Target, Range("**B1:B20**")) Is Nothing Then 
    
        If Target.Value <> "" And Target.Value > 0 And IsNumeric(Target.Value) Then 
    
            Target.Offset(, -1).Interior.Color = **RGB(255, 0, 0)** 
    
        Else 
    
            Target.Offset(, -1).Interior.Pattern = xlNone 
    
        End If 
    
    End If 
    

    End Sub

    la parte evidenziata è il colore che puoi scegliere come vuoi.

    Considera che verifica se la cella non è vuota, ha un numero ed è superiore a 0, il range monitorato è B1:B20 che puoi eventualmente estendere a piacimento.

    Ciao.

    La risposta è stata utile?

    2 persone hanno trovato utile questa risposta.
    0 commenti Nessun commento
  4. Anonimo
    2022-09-08T14:23:52+00:00

    Ciao Gianfranco,

    [...]

    me lo ricordo perchè Norman me l'ha fatto notare

    tutte le volte che ho scritto una macro con

    If Not Intersect(Target, Range(

    e anche di disattivare gli eventi

    [...]

    Credo che, nel caso di interesse, ho detto che è necessario disabilitare gli eventi se la procedura Worksheet_Change scrive sul foglio. Questo perché l'azione di scrivere (o cancellare, che è equivalente) ri-scatena l'evento stesso.

    Più in generale, tuttavia, qualsiasi codice evento dovrebbe disabilitare gli eventi se il codice evento potrebbe rilanciare l'evento stesso. Detto questo, la disabilitazione dovrebbe essere limitata rigorosamente alla gestione delle sole istruzioni problematiche. Questo perché potrebbe essere desiderabile impedire il riavvio della procedura stessa ma consentire l'esecuzione di altro codice evento.

    ===

    Regards,

    Norman

    Immagine

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento
  5. Gianfranco55 25,190 Punti di reputazione Moderatore volontario
    2022-09-08T12:21:25+00:00

    ciao

    Eleuterio

    VBA---310 caratteri non contando gli spazi

    difficoltà 3

    formula---6 caratteri

    difficoltà 0

    vba 0-formula 1

    😁

    a parte gli scherzi

    dovresti gestire l'errore

    If Not Intersect(Target, Range("B1:B20")) Is Nothing Then

    mi sembra vada in errore se vengono cancellate o modificate più celle assieme

    e scommetto un caffè che succederà😉

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento