Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Macro Excel e formattazione

    Salve
    Non essendo pratico di macro, spero che qualcuno mi aiuti nella realizzazione di ciò che mi serve e che non sono ancora riuscito a realizzare..
    In pratica, ho un foglio di lavoro in cui la colonna A e la colonna B contengono soltanto numeri.
    Riga per riga, ho necessità di confrontare i numeri contenuti nelle 2 colonne e di colorare una delle due celle al verificarsi di determinate condizioni.
    Quindi partendo dalla riga 1:

    Se A1<=B1 e A1>=20 e A1<25 colora A1 in giallo
    Se A1>B1 e B1>=20 e B1<25 colora B1 in giallo
    Se A1<=B1 e A1>=25 e A1<31 colora A1 in rosso
    Se A1>B1 e B1>=25 e B1<31 colora B1 in rosso
    Se A1>=B1 e A1>=31 e A1<115 colora A1 in blu
    Se A1<B1 e B1>=31 e B1<115 colora B1 in blu
    Se A1>=B1 e A1>=115 e A1<121 colora A1 in viola
    Se A1<B1 e B1>=115 e B1<121 colora B1 in viola
    Se A1<=B1 e A1>=121 colora A1 in arancio
    Se A1>B1 e B1>=121 colora B1 in arancio
    Se A1>B1 e B1<0 colora B1 in rosa
    Se A1<0 colora A1 in verde

    So che é possibile con la formattazione condizionale utilizzando le ultime versioni di Excel che superano il limite dei 3 criteri.
    Purtroppo però ho necessita di utilizzare il foglio di lavoro su un pc in cui c'é Office 2003.
    Grazie in anticipo a chi mi aiuterà.
    Ciao

    lapunzina

  2. #2
    Ciao,
    questa dovrebbe essere la “traduzione” in VBA della tua serie di condizioni.

    codice:
    Private Sub Worksheet_Change(ByVal Target As Range)
    
       If Not Intersect(Target, Range("A:B")) Is Nothing Then
       
          For Each Casella_A In Range("A1:A1000")
            
            Set Casella_B = Casella_A.Offset(0, 1)
            
            If Casella_A <= Casella_B And Casella_A >= 20 And Casella_A < 25 Then
               Casella_A.Interior.Color = vbYellow
               Casella_B.Interior.ColorIndex = xlColorIndexNone
            End If
            
            If Casella_A > Casella_B And Casella_B >= 20 And Casella_B < 25 Then
               Casella_A.Interior.ColorIndex = xlColorIndexNone
               Casella_B.Interior.Color = vbYellow
            End If
            
            If Casella_A <= Casella_B And Casella_A >= 25 And Casella_A < 31 Then
               Casella_A.Interior.Color = vbRed
               Casella_B.Interior.ColorIndex = xlColorIndexNone
            End If
            
            If Casella_A > Casella_B And Casella_B >= 25 And Casella_B < 31 Then
               Casella_A.Interior.ColorIndex = xlColorIndexNone
               Casella_B.Interior.Color = vbRed
            End If
            
            If Casella_A >= Casella_B And Casella_A >= 31 And Casella_A < 115 Then
               Casella_A.Interior.Color = vbBlue
               Casella_B.Interior.ColorIndex = xlColorIndexNone
            End If
            
            If Casella_A < Casella_B And Casella_B >= 31 And Casella_B < 115 Then
               Casella_A.Interior.ColorIndex = xlColorIndexNone
               Casella_B.Interior.Color = vbBlue
            End If
            
            If Casella_A >= Casella_B And Casella_A >= 115 And Casella_A < 121 Then
               Casella_A.Interior.Color = RGB(112, 48, 160)
               Casella_B.Interior.ColorIndex = xlColorIndexNone
            End If
            
            If Casella_A < Casella_B And Casella_B >= 115 And Casella_B < 121 Then
               Casella_A.Interior.ColorIndex = xlColorIndexNone
               Casella_B.Interior.Color = RGB(112, 48, 160)
            End If
            
            If Casella_A <= Casella_B And Casella_A >= 121 Then
               Casella_A.Interior.Color = RGB(255, 192, 0)
               Casella_B.Interior.ColorIndex = xlColorIndexNone
            End If
            
            If Casella_A > Casella_B And Casella_B >= 121 Then
               Casella_A.Interior.ColorIndex = xlColorIndexNone
               Casella_B.Interior.Color = RGB(255, 192, 0)
            End If
            
            If Casella_A > Casella_B And Casella_B < 0 Then
               Casella_A.Interior.ColorIndex = xlColorIndexNone
               Casella_B.Interior.Color = RGB(255, 128, 255)
            End If
            
            If Casella_A < 0 Then
               Casella_A.Interior.Color = vbGreen
               Casella_B.Interior.ColorIndex = xlColorIndexNone
            End If
          
          Next
       
       End If
    
    End Sub
    Devi solo copia/incollare il codice nell'editor di VBA che si apre con ALT+F11 e indicare il range che ti interessa al posto di A1:A1000 (indica solo la colonna A, la colonna B viene ottenuta con l'offset).

    Tieni presente che le if le ho messe in cascata, come le hai indicate tu, in modo quindi che vengano eseguite tutte ogni volta e che quella che comanda sia l'ultima (cioè se una coppia di valori, come 30-40, soddisfa più di una condizione, la colorazione risultante sarà quella dell'ultima if soddisfatta).

    Se vuoi invece che in questi casi sia la prima a comandare devi togliere tutte le end if tranne le ultime due e sostituire tutte le if, tranne le prime due, con ElseIf.

    Fammi sapere come va
    Ciao
    La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
    www.beppegrillo.it

  3. #3
    Grazie infinite
    Funziona alla perfezione!!!!
    Sei stato gentilissimo
    Ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.