Condividi:        

Funzione Somma per colore

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Funzione Somma per colore

Postdi Ricky0185 » 31/05/22 15:42

Salve, in un file grandicello dove in una colonna ho diverse voci e nella colonna accanto relativi valori, con colori di fondo delle celle diversi per tipologia d'articolo ed in più alcune di queste celle senza colore, non riesco a far si che non venga ripetuto l'ultimo valore della somma parziale fino a quel punto ricavata. Ho fatto un piccolo esempio con il solo colore giallo.
Non sono sicuro di aver utilizzato dropbox nel modo corretto perciò allego immagine del file e della funzione
Immagine
Grazie.Saluti
R
Ricky0185
Utente Senior
 
Post: 288
Iscritto il: 10/12/19 20:38

Sponsor
 

Re: Funzione Somma per colore

Postdi Anthony47 » 31/05/22 15:48

Non sono certo di capire quali formule hai usato in C2 e C3, me lo scrivi qui?
Avatar utente
Anthony47
Moderatore
 
Post: 19386
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Funzione Somma per colore

Postdi Anthony47 » 31/05/22 15:51

E, a guardare bene, non ho capito che cosa non ti torna...
Avatar utente
Anthony47
Moderatore
 
Post: 19386
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Funzione Somma per colore

Postdi Ricky0185 » 31/05/22 15:54

In C2 quella che vedi nell'immagine, dove ho solo messo l'asterisco all'inizio per mostrare la formula, poi ho tirato giù.
Vorrei non apparissero i valori nelle celle dove ho messo una "x" sulle colonna accanto
Ricky0185
Utente Senior
 
Post: 288
Iscritto il: 10/12/19 20:38

Re: Funzione Somma per colore

Postdi Anthony47 » 31/05/22 16:03

Mah... forse
Codice: Seleziona tutto
Function SommaCellePerColore(rData As Range, cellRefColor As Range)
    Dim indRefColor As Long
    Dim cellaCorrente As Range
    Dim sumRes, noVal As Boolean
'
    Application.Volatile
    sumRes = 0
    indRefColor = cellRefColor.Cells(1, 1).Interior.Color
    For Each cellaCorrente In rData
        If indRefColor = cellaCorrente.Interior.Color Then
            sumRes = WorksheetFunction.Sum(cellaCorrente, sumRes)
            noVal = False
        Else
            noVal = True
        End If
    Next cellaCorrente
    If noVal Then
        SommaCellePerColore = ""
    Else
        SommaCellePerColore = sumRes
    End If
End Function
Avatar utente
Anthony47
Moderatore
 
Post: 19386
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Funzione Somma per colore

Postdi Ricky0185 » 31/05/22 16:50

Chiedo scusa se il mio quesito risulta poco chiaro ed insufficiente.
Nella formula "=SommaCellePerColore($B$2:B2;D2)", posizionata dove vuoi ed ovviamente con la funzione in un modulo standard, ti restituisce la somma dei valori delle celle di una colonna che hanno colore di fondo come quello della cella D2 (nessun colore), se avessi messo B2 (giallo) mi dava la somma dei valori delle celle di colore giallo e così via per tutti gli altri colori. Io invece di avere la somma di tutte le celle di stesso colore di una colonna (o di parte della colonna) ho modificato l'area per avere come risultato della formula il progressivo della stessa su cella nella colonna adiacente, ottenuto copiando la formula nelle celle di tutta la colonna. Mi serve sapere quando raggiungo un certo totale per scaricarlo con altra macro su altro foglio.
Ed ora vado a vedere come hai risolto.
Ciao e grazie
R
Ricky0185
Utente Senior
 
Post: 288
Iscritto il: 10/12/19 20:38

Re: Funzione Somma per colore

Postdi Ricky0185 » 31/05/22 16:54

Made by Anthony...ovvio che funziona.
R
Ricky0185
Utente Senior
 
Post: 288
Iscritto il: 10/12/19 20:38

Re: Funzione Somma per colore

Postdi Anthony47 » 31/05/22 17:14

Ma se hai un file "grandicello", quella formula inserita in "tante celle" e ricalcolata in continuazione (Application.Volatile, ma non puoi farne a meno altrimenti non si aggiorna quasi mai) rischia di essere pesantuccia.

Questa la usi 1 volta e ti dice in quale indirizzo hai raggiunto la soglia impostata:
Codice: Seleziona tutto
Function CheckSoglia(ByRef myRan As Range, ByRef myCol As Range, ByVal myThr As Double) As String
Dim myC As Range, tarCol As Long, mySum As Double

tarCol = myCol.Interior.Color
For Each myC In myRan
    If myC.Interior.Color = tarCol Then
        mySum = mySum + myC.Value
        If mySum >= myThr Then Exit For
    End If
Next myC
If Not myC Is Nothing Then CheckSoglia = myC.Address(0, 0)
End Function

La puoi usare sul foglio, es
Codice: Seleziona tutto
=CheckSoglia(B2:B12;F1;3)

Ti restituira' la scritta B5

Oppure la usi direttamente nella macro che usi "per scaricarlo con [..] su altro foglio"; es
Codice: Seleziona tutto
Supero = CheckSoglia(Sheets("Foglio1").Range("B2:B10000"), Sheets("Foglio1").Range("D2"), 3)

Ti restituira' B5 nella variabile Supero

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19386
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "Funzione Somma per colore":


Chi c’è in linea

Visitano il forum: Nessuno e 7 ospiti