Fomrula autosuma por color celda no se aplica automáticamente

Tengo una fórmula para sumar cifras de una columna en función del color que pinte las celdas, en mi caso quiero que sume solo las celdas de color rojo, la fórmula funciona bien y hace lo que quiero, pero el problema es que no se aplica al pintar la celda, ni cuando actualizo la hoja, en cambio si introduzco algún dato en alguna celda si lo hace...

Function SumarUsandocolor(CeldaConColorASumar As Range, RangoASumar As Range)

'Declaro una variable para almacenar el color de referencia

Dim ColorReferencia As Integer

'Declaro una variable para almacenar la celda actual de un rango a sumar

Dim CeldaEnRango As Range

'Inicializamos la variable que contiene el color de referencia

'con el valor del color de la celda pasada como primer argumento

ColorReferencia = CeldaConColorASumar.Interior.ColorIndex

'Bucle recorriendo cada una de las celdas del rango a sumar

For Each CeldaEnRango In RangoASumar 3

'Si el color de la celda de referencia coincide con el color

'de la celda actual entonces acumula el valor de la celda 'para sumarlo

If ColorReferencia = CeldaEnRango.Interior.ColorIndex Then SumarUsandocolor = SumarUsandocolor + CeldaEnRango.Value End If Next CeldaEnRango End Function

¿Qué puedo hacer para que al pintar una celda de color rojo automáticamente se recalcule la suma?

2 Respuestas

Respuesta
2

¡Gracias!, he mirado los vídeos y me dan ideas para otras fórmulas que necesito crear, para este problema en concreto no me servían, pero se agradece la ayuda

Respuesta
1

¿Le falta información a tu pregunta por ejemplo las celdas en rojo son continuas o discontinuas?, ¿Tienen información en ellas?, ¿El rango que quieres sumar es solo una columna o bien son varias? Por ejemplo: toda la columna A o bien de C2:z1000, lo que te puedo sugerir es que subas una imagen de tu info puede ser inventada lo que ocupo es la estructura de tus datos para ver que se puede hacer, lo que puedo decirte es que en la función tu defines el alcance de los datos por eso no se puede poner en automático, lo que se tendría que hacer es en vez de funciones crear una macro evento así cada vez que colores de rojo en automático se sumaria, solo que primero hay que ver tu info para decirte si se puede o no.

Muchas gracias por tu respuesta,

A modo ejemplo, tengo una columna con clientes, y luego una columna por cada mes, los importes sin relleno están sin cobrar, los importes en rojo se han cobrado, lo que me interesa es que al final de cada columna de cada mes se auto sumen los importes en rojo, con la fórmula que yo tengo ya lo hacen, el problema es que los cambios no se aplican hasta que hago doble click en la celda que contiene la fórmula, y lo que me interesa es que al pintar la celda de rojo automáticamente se recalcule la autosuma

Hay un problema con lo que pides y es el siguiente tanto por función como por macro personalizada no se puede hacer lo que pides por la siguiente razón Excel no considera un cambio significativo cambiar el color de una celda, si fuera un numero, un texto o cualquier otra cosa entonces se podría hacer lo que pides, la macro que hice que se supone debería calcular en automático la suma si lo hace solo después de que coloreas la celdas y das click en otra o bien dando enter o moviéndote con las flechas, supongo que es lo mismo con tu función personlaizada.

En mi caso, solo actualiza el resultado de la suma cambiando el valor de las celdas, o introduciéndolo de nuevo, por ejemplo si tengo una celda con valor 30, la marco en rojo, vuelvo a escribir el valor 30 en esa celda y al dar intro se actualiza la autosuma, o bien haciendo doble click en la celda que contiene la fórmula, pero es un engorro y un riesgo... si se puede hacer como dices tú, una vez pintada de rojo la celda, dando a intro o clicando en otra celda, ya me sirve...

Copia esta macro al modulo VBA de la hoja1, puedes añadir o quitar filas o columnas, la macro se ajustara en automático y cada que colores una celda de rojo con solo dar enter o moverte con las flecha la suma se actualizara en automático, la información debe estar como te muestro en la página si tu información no comienza en B5 cambia todos los B5 de la macro por la celda donde comience tu información.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set datos = Range("b5").CurrentRegion
With datos
    c = .Columns.Count
    Set datos = .Columns(2).Resize(.Rows.Count, c - 1)
End With
On Error Resume Next
x = Not Intersect(ActiveCell, Range(datos.Address))
On Error GoTo 0
If x Then
With datos
    r = .Rows.Count: c = .Columns.Count
    For j = 1 To c
    x = 1:   suma = 0
    For I = 1 To r
            XCOLOR = .Cells(I, j).Interior.ColorIndex
            NUMERO = .Cells(I, j)
            ROJO = XCOLOR = 3 And x = 1
            ROJO2 = XCOLOR = 3 And x > 1
            If ROJO Then suma = NUMERO: x = x + 1
            If ROJO2 Then suma = NUMERO + suma: x = x + 1
        Next I
        .Cells(r + 2, j) = suma
    Next j
End With
End If
End Sub

Un millón de gracias, con tu fórmula doy por arreglado el problema, es un placer contar con gente como tú, que desinteresadamente ayuda a los demás... un abrazo y de nuevo gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas