zero e cella vuota



  • zero e cella vuota
    di rocco (utente non iscritto) data: 04/01/2015 16:29:50

    salve a tutti e buon anno
    porto un esempio di quello che vorrei fare ma per un problema dello zero in cella non so come risolverlo:
    devo confrontare 2 celle e se queste hanno lo stesso valore allora me ne colora una di giallo
    con " if cells(1,1) = cells(2,2) then
    cells(1,1)interior.colorindex=6"
    il problema è che se la cella 1,1 non ha nessun valore e la cella 2,2 è 0 la cella 1,1 viene colorata lo stesso come se avessero tutte e 2 il valore 0
    io vorrei che in questo caso colorasse la cella solo se entrambi avessero il valore 0

    ringrazio fin d'ora chi mi potra aiutare
    ciao



  • di Vecchio Frac data: 04/01/2015 16:47:27

    Ti serve testare con IsEmpty() che le celle non siano vuote e porre tutte queste condizioni in And fra loro.





  • di mabolsie (utente non iscritto) data: 04/01/2015 16:53:20

    E' un po spartano ma funziona provalo

    Ciao Max
     
    Sub colora()
    If Cells(1, 1) = Cells(2, 2) Then
        Cells(1, 1).Interior.ColorIndex = 6
    End If
        If Cells(1, 1) = 0 Then
        Cells(1, 1).Interior.ColorIndex = xlNone
    End If
    End Sub



  • di Vecchio Frac data: 04/01/2015 16:59:25

    @Max
    Hai provato la tua soluzione, anche con diversi valori?
    Credo che ci sia qualche cosa da rivedere :)





  • di mabolsie (utente non iscritto) data: 04/01/2015 17:03:03

    @Vecchio Frac
    ho provato con molte soluzioni ed a me funziona, dimmi tu dove è l'errore magari non riesco a vederlo.

    Ciao Max



  • di mabolsie (utente non iscritto) data: 04/01/2015 17:06:21

    Forse è cosi ??

    Ciao Vecchio
     
    Sub colora()
    Cells(1, 1).Interior.ColorIndex = xlNone
    If Cells(1, 1) = Cells(2, 2) Then
        Cells(1, 1).Interior.ColorIndex = 6
    End If
        If Cells(1, 1) = 0 Then
        Cells(1, 1).Interior.ColorIndex = xlNone
    End If
    End Sub



  • di Vecchio Frac data: 04/01/2015 17:11:37

    Già è diverso, ma comunque fallisce se inserisci zero in entrambe le celle.
    Lui invece vuole che anche se c'è zero la cella venga colorata.
    In sostanza, i due valori devono essere uguali, basta che le celle siano non-vuote.
    E per aggiungere una finezza, "r " nella prima cella è uguale o diverso da " r" nella seconda cella?





  • di Santuberto (utente non iscritto) data: 04/01/2015 17:19:39

    Buonasera. Pur non volendo passare davanti a nessuno, propongo anch'io la mia modesta formattazione condizionale: =O(E(A1=0;B1=0);E(A1=B1))



  • di Santuberto (utente non iscritto) data: 04/01/2015 17:27:19

    Chiedo scusa. E' meglio che ritiri quanto ho scritto nel precedente messaggio.



  • di Vecchio Frac data: 04/01/2015 17:37:15

    @Santuberto
    1. Non passi davanti a nessuno
    2. Non devi scusarti
    3. Più contribuiamo e più ci arricchiamo
    4. Nessuno ha il verbo in tasca :)
    5. Riprova e sarai più fortunato :P
    6. L'idea della formaggiazione condizionale è comunque buona







  • di rocco (utente non iscritto) data: 04/01/2015 17:40:22

    io vi sto leggendo ragazzi ma ci sto capendo proprio poco
    devono essere entrambe dello stesso valore le 2 celle anche se sono entrambe 0
    se una è 0 e l'altra non ha valore allora quella senza valore non deve essere colorata, l'altra non viene mai colorata in nessun caso
    con tutti gli altri numeri mi riesce bene ma con lo 0 no



  • di Santuberto (utente non iscritto) data: 04/01/2015 17:41:23

    Ringrazio Vecchio Frac e posto la mia soluzione. Questa volta provata e collaudata. =E(A1<>"";B1<>"";O(E(A1=0;B1=0);E(A1=B1)))



  • di rocco (utente non iscritto) data: 04/01/2015 17:48:21

    scusa Santuberto ma qualcosa di piu semplice (per me intendo)?
    da inserire nella mia piccola macro:

    For cambiaa = 2 To 236 Step 6
    For riga = 6 To 40
    For colonna = cambiaa To cambiaa + 3
    If Cells(riga, colonna) = Cells(riga, cambiaa - 1) Then
    Cells(riga, colonna).Interior.ColorIndex = 6
    End If
    Next colonna
    Next riga
    Next cambiaa



  • di Santuberto (utente non iscritto) data: 04/01/2015 17:52:20

    Cito: scusa Santuberto ma qualcosa di piu semplice (per me intendo)?
    Purtroppo io non conosco le macro, ma credo che (considerato che la mia formattazione condizionale funziona) qualcosa di più semplice ... Un cordiale saluto



  • di Santuberto (utente non iscritto) data: 04/01/2015 17:58:20

    Ho allegato file AEX



  • di Vecchio Frac data: 04/01/2015 18:28:37

    Bravo Santuberto :)

    @rocco
    cosa fa il tuo codice?
    il contatore "cambiaa" cicla per 40 volte da 2 a 236 (a passi di 6)
    per ognuno di questi 40 cicli:
    il contatore "riga" cicla da 6 a 40
    per ognuno di questi 34 cicli:
    il contatore "colonna" cicla dall'attuale valore di "cambiaa" fino a quest'ultimo valore aumentato di 3
    per ognuno di questi 3 cicli:
    se il valore della cella identificata da "riga" e "colonna" corrisponde al valore della cella pari "riga", colonna precedente a quella del valore attuale di "cambia", allora colora la cella in "riga", "colonna" di giallo

    Giusto? (come minimo c'è un for eccessivo)





  • di rocco (utente non iscritto) data: 04/01/2015 18:46:59

    per Santuberto
    non posso aprire il tuo file perchè uso excel 2000 (9.0.2520)

    per Vecchio Frac
    la mia macro comunque funziona, ilmio problema è che in quelle occasioni che trova la cella vuota e la confronta con la cella 0 mi colora la cella vuota
    e cosi il resto della macro che vorrei finire non riesco a farla e mi tocca fare le ultime operazioni a vista e mi fa perdere un po di tempo



  • di mabolsie (utente non iscritto) data: 04/01/2015 18:52:52

    @Vecchio frac
    Così può andar bene ???

    @Rocco

    se Vecchio avvalla... prova ad inserirla nella tua sub
    Ciao max
     
    Sub colora()
    Cells(1, 1).Interior.ColorIndex = xlNone
    If Cells(1, 1) = Cells(2, 2) Then
        Cells(1, 1).Interior.ColorIndex = 6
    End If
        
    End Sub



  • di rocco (utente non iscritto) data: 04/01/2015 19:19:40

    per mabolsie
    è la stessa cosa
    la cella da colorare è sin dalla partenza di colore "neutro"
    quindi metterci il neutro prima della verifica non risolve



  • di rocco (utente non iscritto) data: 04/01/2015 19:39:27

    ok ragazzi, ho risolto
    alla fine faccio una verifica sol foglio con:

    For rigas = 1 To 40
    For colonnas = 1 To 255
    If Cells(rigas, colonnas).Value = False Then
    Cells(rigas, colonnas).Interior.ColorIndex = x1none
    End If
    Next colonnas
    Next rigas


    grazie a tutti per gli interventi



  • di Vecchio Frac data: 04/01/2015 20:04:11

    @Max
    Ti manca pur sempre di testare se le due celle non sono empty.
     
    Per Max
    
    Option Explicit
    
    ' confronta celle A1 e B2, se sono uguali colora A1 di giallo
    ' le celle devono essere non-vuote
    ' non sono discriminanti gli spazi non necessari a inizio o fine cella
    ' quindi 'rocco     ' equivale a 'rocco' che equivale a '   rocco'
    
    
    Sub colora_soluzione1()
    ' utilizzo isEmpty()
        Cells(1, 1).Interior.ColorIndex = xlNone
        If Not IsEmpty(Cells(1, 1)) And Not IsEmpty(Cells(2, 2)) And Trim(Cells(1, 1)) = Trim(Cells(2, 2)) Then
            Cells(1, 1).Interior.ColorIndex = 6
        End If
    End Sub
    
    
    Sub colora_soluzione2()
    ' utilizzo la concatenazione di stringhe
        Cells(1, 1).Interior.ColorIndex = xlNone
        If Trim(Cells(1, 1) & Cells(2, 2)) <> "" And Trim(Cells(1, 1)) = Trim(Cells(2, 2)) Then
            Cells(1, 1).Interior.ColorIndex = 6
        End If
    End Sub
    






  • di Vecchio Frac data: 04/01/2015 20:08:00

    @rocco
    Il nuovo codice che hai postato cambia molto lo scenario.
    Prima confronti una cella con la cella precedente, riga per riga di 40 righe, per un range di 40 colonne con due colonne in mezzo.
    Poi controlli un valore "falso" che in realtà non fa quello che pensi tu anche se forse il risultato è lo stesso.

    Comunque ho prodotto qualcosa, lo allego qui sotto, confrontando i tempi li dimezzo rispetto al tuo codice iniziale.
    E dovrebbe funzionare, dico dovrebbe perchè manca uno scenario reale su cui fare test.
     
    Sub vfrac()
    Dim rng As Range, riga As Range, i As Integer
    
        Application.ScreenUpdating = False
        Set rng = Range("b6:ie40")
        
        For Each riga In rng.Rows
            With riga
                For i = 1 To 236
                    If i Mod 6 <> 5 And i Mod 6 <> 0 Then
                        If Not IsEmpty(.Cells(i)) And Not IsEmpty(.Cells(i + 1)) And .Cells(i) = .Cells(i + 1) Then .Cells(i).Interior.ColorIndex = 6
                    End If
                Next
            End With
        Next
        Application.ScreenUpdating = True
    End Sub
    






  • di mabolsie (utente non iscritto) data: 04/01/2015 20:22:42

    grazie vf



  • di rocco (utente non iscritto) data: 04/01/2015 22:40:54

    grazie Vecchio Frac
    lo provero anche solo per imparare qualcosa di nuovo
    comunque per acesso il mio sta funzionando proprio come volevo