Ejecutar suma de celdas coloreadas

27/10/2005 - 02:01 por Esteban Dido | Informe spam
Hola,
Estoy sumando celdas coloreadas con la macro que aparece en
http://www.excelesp.com/funcperso01.htm
recomendada por H.M. pero quisiera modificar el código para incluír un botón
que la ejecute únicamente cuando sea presionado en vez de que se actualice
sóla. Agradeceré un poco de ayuda.
ED

Preguntas similare

Leer las respuestas

#6 Esteban Dido
28/10/2005 - 03:51 | Informe spam
Héctor,
Es una planilla para llevar la cuenta corriente del banco.
Se colorea en amarillo (por ejemplo) las cifras aún no registradas en la
cartola (¿así le dicen también en México?) del banco y con una fórmula del
tipo
ñ0+SumarColorFondo($I$5,$D$7:$D$506)-SumarColorFondo($I$5,$E$7:$E$506)
donde la columna F es el saldo, I5 la celda con el color de muestra, la
columna D los cargos y la E los abonos.
Es una hoja tan sencilla que [insisto] yo pondría una macro en vez de la
función.
Y no sé por qué camina tan lento (2 a 2.5 segundos por reloj en pasar de una
celda a otra)
Gracias por tu preocupación.
E.D.


"Héctor Miguel" escribió en el mensaje
news:
hola, Esteban !

> No me sirve... Gracias igual por tu esfuerzo.
> Mira, el punto es el siguiente: es para un usuario que tiene 82 años.


Debe funcionar sin complicaciones.
> Si obligamos a recalculos constantes, el paso de una celda a otra se


pone tremendamente lento.
> ... quisiera que una vez que... haya hecho todas las de/coloraciones que


necesita
> haga un click en alguna parte para que se actualice la hoja, solo una


hoja, la hoja activa, y le arroje la suma que desea.
> ... se puede hacer con una macro en vez de una funcion personalizada?
> Ese es el motivo por el que pense en un boton de comando como dije al


principio.

1) si comentas que re/calculos constantes provocan lentitud [pareciera


que] el 'modelito' no esta tan 'libre de complicaciones' -?-

2) no se si habras notado que la instruccion de 're-calcular' [en el


evento de esa hoja] obliga al re-calculo de SOLO 'esa' hoja -?-
[acabo de hacer pruebas en modelos bastante 'complejos' en sus


re-calculos y... 'no problem'] :D

3) cambiar de funcion a macro 'directa' implicaria perder beneficios


como...
en una funcion puedes usarla en tantas celdas con distintos


'argumentos' y rangos como sea necesario [pero]...
en una macro seria necesario algun parametro adicional para indicarle


al codigo 'cual de todas' -?- [o modificar la macro n_veces] :-(

4) [incluso] pensaria en procedimientos menos 'complicados' como...
en lugar de de/colorear celdas... usar celdas adyacentes como


'criterios' ya sea por numero o textos [1,2,3... / rojo,azul,verde...]
y usar formulas del tipo:


=sumaproducto(rango_a_sumar*(rango_criterio=criterio))

si me estoy 'metiendo donde no me llaman' [cosa rara en mi]... :))
podrias exponer algun otro detalle relevante que se pudiera estar quedando


'en el tintero' ?

saludos,
hector.


Respuesta Responder a este mensaje
#7 Héctor Miguel
28/10/2005 - 06:06 | Informe spam
hola, Esteban !

Es una planilla para llevar la cuenta corriente del banco.
Se colorea... las cifras aun no registradas en la cartola... del banco
y con una formula del tipo ñ0+SumarColorFondo($I$5,$D$7:$D$506)-SumarColorFondo($I$5,$E$7:$E$506)
donde la columna F es el saldo, I5 la celda con el color de muestra, la columna D los cargos y la E los abonos.
Es una hoja tan sencilla que [insisto] yo pondria una macro en vez de la funcion.
Y no se por que camina tan lento (2 a 2.5 segundos por reloj en pasar de una celda a otra)



el termino de 'cartola' [me parece que] es originario de las provincias de Navarra y los territorios vasco-franceses -?-
en mexico le llamamos 'estado de cuenta -bancario-' :)

si lo que necesitas es una macro... puedes asignar a algun objeto o atajo de teclado algo +/- como lo siguiente:
en un modulo de codigo 'normal' ==Sub ActualizarBanco()
Dim Color As Integer, Sumar As Double, Restar As Double, Celda As Range, Destino As String
Color = Range("i5").Interior.ColorIndex
Destino = "i11" ' <= pon aqui cual seria la celda donde se depositaria el resultado :)
For Each Celda In Range("d7:d506")
If Celda.Interior.ColorIndex = Color Then Sumar = Sumar + Celda
Next
For Each Celda In Range("e7:e506")
If Celda.Interior.ColorIndex = Color Then Restar = Restar + Celda
Next
Range(Destino) = Range("f10") + Sumar - Restar
End Sub

[probablemente] necesitaras nombrar rangos [dinamicos] para facilitar modificaciones por si los rangos de/crecen -?-

otra alternativa [sin macros] pudiera ser si [p.e.] tienes disponible la columna I...
poner en la celda correspondiente [p.e.] una unidad [1] -o cualquier otra cosa- donde no se ha hecho el movimiento en el banco
y utilizar una formula del tipo: ñ0+sumar.si($i$7:$i$506,1,$d$7:$d$506)-sumar.si($i$7:$i$506,1,$e$7:$e$506)
toma nota que usando funciones 'nativas' de excel, la 'respuesta' [en el resultado] es mas rapida :)
[a menos que el re/calculo se tarde por otras cuestiones como... demasiadas formulas 'complicadas', etc.] -?-

si cualquier duda... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#8 Esteban Dido
29/10/2005 - 01:43 | Informe spam
Gracias, H.M. por la macro. Funciona perfecto.
Tu ayuda desinteresada siempre es muy valiosa.
E.D.


"Héctor Miguel" escribió en el mensaje
news:
hola, Esteban !

> Es una planilla para llevar la cuenta corriente del banco.
> Se colorea... las cifras aun no registradas en la cartola... del banco
> y con una formula del tipo


ñ0+SumarColorFondo($I$5,$D$7:$D$506)-SumarColorFondo($I$5,$E$7:$E$506)
> donde la columna F es el saldo, I5 la celda con el color de muestra, la


columna D los cargos y la E los abonos.
> Es una hoja tan sencilla que [insisto] yo pondria una macro en vez de la


funcion.
> Y no se por que camina tan lento (2 a 2.5 segundos por reloj en pasar de


una celda a otra)

el termino de 'cartola' [me parece que] es originario de las provincias de


Navarra y los territorios vasco-franceses -?-
en mexico le llamamos 'estado de cuenta -bancario-' :)

si lo que necesitas es una macro... puedes asignar a algun objeto o atajo


de teclado algo +/- como lo siguiente:
en un modulo de codigo 'normal' ==> Sub ActualizarBanco()
Dim Color As Integer, Sumar As Double, Restar As Double, Celda As Range,


Destino As String
Color = Range("i5").Interior.ColorIndex
Destino = "i11" ' <= pon aqui cual seria la celda donde se depositaria


el resultado :)
For Each Celda In Range("d7:d506")
If Celda.Interior.ColorIndex = Color Then Sumar = Sumar + Celda
Next
For Each Celda In Range("e7:e506")
If Celda.Interior.ColorIndex = Color Then Restar = Restar + Celda
Next
Range(Destino) = Range("f10") + Sumar - Restar
End Sub

[probablemente] necesitaras nombrar rangos [dinamicos] para facilitar


modificaciones por si los rangos de/crecen -?-

otra alternativa [sin macros] pudiera ser si [p.e.] tienes disponible la


columna I...
poner en la celda correspondiente [p.e.] una unidad [1] -o cualquier otra


cosa- donde no se ha hecho el movimiento en el banco
y utilizar una formula del tipo:


ñ0+sumar.si($i$7:$i$506,1,$d$7:$d$506)-sumar.si($i$7:$i$506,1,$e$7:$e$506)
toma nota que usando funciones 'nativas' de excel, la 'respuesta' [en el


resultado] es mas rapida :)
[a menos que el re/calculo se tarde por otras cuestiones como...


demasiadas formulas 'complicadas', etc.] -?-

si cualquier duda... comentas ?
saludos,
hector.


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