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.

Preguntas similare

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.
Respuesta Responder a este mensaje
#2 Alain
26/02/2004 - 19:47 | Informe spam
Hola Fernando:
Muchas gracias por ayudarme, nomás que ya me pusiste a
estudiar visual basic.
A ver. Se supone que esta nueva función se va a agregar en
las funciones definidas por el usuario ¿verdad?
Pero no se por dónde empezar. Ya compré un libro de visual
basic.
Pero como empiezo? ¿Abro en excel el editor de VB? ¿y creo
una nueva rutina llamada
SumarColorFuenteFormatoCondicional?
y pongo todas las instrucciones que me dices, o qué onda?
Gracias.
Alain Estrello.
Respuesta Responder a este mensaje
#3 Fernando Arroyo
26/02/2004 - 21:02 | Informe spam
Lo único que tienes que hacer es:

- Abrir el editor de VBA pulsando Alt + F11
- Insertar->Módulo
- En la ventana de código (la más grande, a la derecha), pegar el código que puse en mi anterior mensaje.

Y ya está. La función debería poder ser llamada desde cualquier hoja del libro, mediante la sintaxis:
=SumarColorFuenteFormatoCondicional(Rango_o_Celda;Número_de_condición)
o
=SumarColorFuenteFormatoCondicional(Rango_o_Celda,Número_de_condición)
dependiendo de tu separador de listas.

Como veo que estás empezando a trabajar con VBA, si tienes alguna duda podría enviarte un libro con la función "funcionando".
Un saludo.


Fernando Arroyo
MS MVP - Excel


"Alain" escribió en el mensaje news:296a01c3fc99$06660150$
Hola Fernando:
Muchas gracias por ayudarme, nomás que ya me pusiste a
estudiar visual basic.
A ver. Se supone que esta nueva función se va a agregar en
las funciones definidas por el usuario ¿verdad?
Pero no se por dónde empezar. Ya compré un libro de visual
basic.
Pero como empiezo? ¿Abro en excel el editor de VB? ¿y creo
una nueva rutina llamada
SumarColorFuenteFormatoCondicional?
y pongo todas las instrucciones que me dices, o qué onda?
Gracias.
Alain Estrello.
Respuesta Responder a este mensaje
#4 Alain Estrello
28/02/2004 - 23:01 | Informe spam
Hola fernando, muchas gracias por tu ayuda. Te agradecería
si me pudieras mandar un archivo con la función
funcionando ya con un ejemplo X. A la dirección

Pues ya loa instalé, y no se hacen bien las sumas.
Quisiera saber la manera pues en que tú pusiste las
condiciones para ver si es un error en mi manera de dar de
alta las condiciones.
Gracias.


Lo único que tienes que hacer es:

- Abrir el editor de VBA pulsando Alt + F11
- Insertar->Módulo
- En la ventana de código (la más grande, a la derecha),


pegar el código que puse en mi anterior mensaje.

Y ya está. La función debería poder ser llamada desde


cualquier hoja del libro, mediante la sintaxis:
=SumarColorFuenteFormatoCondicional


(Rango_o_Celda;Número_de_condición)
o
=SumarColorFuenteFormatoCondicional


(Rango_o_Celda,Número_de_condición)
dependiendo de tu separador de listas.

Como veo que estás empezando a trabajar con VBA, si


tienes alguna duda podría enviarte un libro con la
función "funcionando".
Un saludo.


Fernando Arroyo
MS MVP - Excel


"Alain" escribió en


el mensaje news:296a01c3fc99$06660150$
Hola Fernando:
Muchas gracias por ayudarme, nomás que ya me pusiste a
estudiar visual basic.
A ver. Se supone que esta nueva función se va a agregar


en
las funciones definidas por el usuario ¿verdad?
Pero no se por dónde empezar. Ya compré un libro de


visual
basic.
Pero como empiezo? ¿Abro en excel el editor de VB? ¿y


creo
una nueva rutina llamada
SumarColorFuenteFormatoCondicional?
y pongo todas las instrucciones que me dices, o qué onda?
Gracias.
Alain Estrello.
.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida