Sumas condicionales

26/02/2004 - 02:08 por Alain | Informe spam
Hola:
Tengo una tabla con números con formato condicional y lo
que quiero es sumar únicamente los números de cierto
formato.
Ejem: Tengo una tabla A1:A10 con números rojos y negros
(las celdas tienen formato condicional y pues unas tienen
números rojos y otras negros).
Lo que quiero es sumar "Suma(A1:A10)" pero que sólo se
sumen los rojos o los negros.
Por favor ayúdenme.
Gracias.
 

Leer las respuestas

#1 Fernando Arroyo
26/02/2004 - 11:53 | Informe spam
Te adjunto un conjunto de tres funciones que creo que juntas hacen lo que necesitas. La primera la he escrito yo, mientras que las otras dos están adaptadas de sendas funciones escritas (magistralmente) por Chip Pearson.


Function SumarColorFuenteFormatoCondicional(rngR As Range, btCondición As Byte) As Variant
If btCondición < 1 Then SumarColorFuenteFormatoCondicional = "Error: el número de condiciones debe ser al menos 1"
If btCondición > 3 Then SumarColorFuenteFormatoCondicional = "Error: el número de condiciones no puede ser mayor de 3."

Select Case rngR.FormatConditions.Count
Case -1
SumarColorFuenteFormatoCondicional = "Error: el rango no tiene el mismo número de condiciones en todas sus celdas."
Exit Function
Case Is < btCondición
SumarColorFuenteFormatoCondicional = "Error: el rango tiene menos de " & btCondición & " condiciones."
Exit Function
End Select

Dim rngC As Range
Dim dblAcumulado As Double

For Each rngC In rngR.Cells
If ColorIndexOfCF(rngC, True) = rngC.FormatConditions(btCondición).Font.ColorIndex Then SumarColorFuenteFormatoCondicional = SumarColorFuenteFormatoCondicional + rngC
Next rngC

Set rngC = Nothing

Exit Function
End Function


Function ColorIndexOfCF(Rng As Range, Optional OfText As Boolean = False) As Integer

Dim AC As Integer
AC = ActiveCondition(Rng)

If AC = 0 Then
If OfText = True Then
ColorIndexOfCF = Rng.Font.ColorIndex
Else
ColorIndexOfCF = Rng.Interior.ColorIndex
End If
Else
If OfText = True Then
ColorIndexOfCF = Rng.FormatConditions(AC).Font.ColorIndex
Else
ColorIndexOfCF = Rng.FormatConditions(AC).Interior.ColorIndex
End If
End If

End Function


Function ActiveCondition(Rng As Range) As Integer

Dim Ndx As Long
Dim FC As FormatCondition

If Rng.FormatConditions.Count = 0 Then
ActiveCondition = 0
Else
For Ndx = 1 To Rng.FormatConditions.Count
Set FC = Rng.FormatConditions(Ndx)
Select Case FC.Type
Case xlCellValue
Select Case FC.Operator
Case xlBetween
If CDbl(Rng.Value) >= CDbl(FC.Formula1) And _
CDbl(Rng.Value) <= CDbl(FC.Formula2) Then
ActiveCondition = Ndx
Exit Function
End If

Case xlGreater
If CDbl(Rng.Value) > CDbl(FC.Formula1) Then
ActiveCondition = Ndx
Exit Function
End If

Case xlEqual
If CDbl(Rng.Value) = CDbl(FC.Formula1) Then
ActiveCondition = Ndx
Exit Function
End If

Case xlGreaterEqual
If CDbl(Rng.Value) >= CDbl(FC.Formula1) Then
ActiveCondition = Ndx
Exit Function
End If

Case xlLess
If CDbl(Rng.Value) < CDbl(FC.Formula1) Then
ActiveCondition = Ndx
Exit Function
End If

Case xlLessEqual
If CDbl(Rng.Value) <= CDbl(FC.Formula1) Then
ActiveCondition = Ndx
Exit Function
End If

Case xlNotEqual
If CDbl(Rng.Value) <> CDbl(FC.Formula1) Then
ActiveCondition = Ndx
Exit Function
End If

Case xlNotBetween
If CDbl(Rng.Value) <= CDbl(FC.Formula1) Or _
CDbl(Rng.Value) >= CDbl(FC.Formula2) Then
ActiveCondition = Ndx
Exit Function
End If

Case Else
Debug.Print "UNKNOWN OPERATOR"
End Select


Case xlExpression
If Application.Evaluate(FC.Formula1) Then
ActiveCondition = Ndx
Exit Function
End If

Case Else
Debug.Print "UNKNOWN TYPE"
End Select

Next Ndx

End If

ActiveCondition = 0

End Function


La sintaxis es:
=SumarColorFuenteFormatoCondicional(Rango_o_Celda;Número_de_condición)

donde:
- Rango_o_Celda es una referencia al rango que se quiere evaluar (sirve un rango con nombre)
- Número_de_condición es eso: el número de la condición que deberá cumplirse para que la celda entre en la suma
- el separador de ambos argumentos puede ser ; o , dependiendo de la configuración regional de tu equipo.

Ejemplo: el rango A1:A20 tiene aplicado un formato condicional con dos condiciones que afectan al color de la fuente. Si quisiéramos averiguar la suma de las celdas de dicho rango que cumplen la 2ª condición, la fórmula sería:

=SumarColorFuenteFormatoCondicional(A1:A20;2)

Un saludo.


Fernando Arroyo
MS MVP - Excel



"Alain" escribió en el mensaje news:1b0701c3fc05$14893c00$
Hola:
Tengo una tabla con números con formato condicional y lo
que quiero es sumar únicamente los números de cierto
formato.
Ejem: Tengo una tabla A1:A10 con números rojos y negros
(las celdas tienen formato condicional y pues unas tienen
números rojos y otras negros).
Lo que quiero es sumar "Suma(A1:A10)" pero que sólo se
sumen los rojos o los negros.
Por favor ayúdenme.
Gracias.

Preguntas similares