Sumar cantidades de celdas variables de una columna, hacia abajo, hasta llegar a una celda vacía.

Respondiste (10/06/2012 ) con la macro que adjunto (y que funciona excelente), a este requerimiento de sumar cantidades de celdas variables de una columna, hacia abajo, hasta llegar a una celda vacía. .

El primer título está siempre en fila 6, sus datos desde fila 7 Columna L hasta una fila aleatoria, por ejemplo la 10 misma columna "L".
La fila siguiente 11 es nuevo título con sus datos desde fila 12 a otra aleatoria por ejemplo fila 15 en la misma columna "L".
Entonces debo sumar de L7 hasta L10 y que quede esa suma en M7, (la fila del título, en columna contigua a los datos). Luego sumar desde L12 hasta L15 y la suma en M12 y así sucesivamente una docena de títulos con sus datos, serán en total 120 filas.
Respondiste con la macro que adjunto (y que funciona excelente):

Sub parciales()
Range("l65000").End(xlUp).Offset(1, 0).Value = "final"
Range("l6").Select
Do While ActiveCell.Value <> "final"
ubica = ActiveCell.Address
ActiveCell.Offset(1, 0).Select
Do While IsNumeric(ActiveCell)
suma = suma + ActiveCell.Value
ActiveCell.Offset(1, 0).Select
Loop
Range(ubica).Offset(0, 1).Value = suma
suma = 0
Loop
ActiveCell.ClearContents
End Sub

Ahora me surgió una necesidad adicional:
Si la suma de parciales en la columna “L” hasta llegar a una celda vacía resulta cero, que no se sobrescriba con el resultado de la suma cero en la celda de la columna de subtotales “M”.

Debe quedar, (si la suma de parciales es cero), en esa celda de la columna “M” la fórmula pre- existente.

1 respuesta

Respuesta
1

No se lo que quieres decer con fórmula pre-existente.

Estimado Luis:
Mira, aquí vemos un ejemplo de resultados parciales en la columna L. Una vez ejecutada la macro aparecen en la columna M las sumas 658869 y 388149 de los subtotales hacia abajo de la columna L. Funciona bien.
3200 es el último valor ubicado en una fila aleatoria, pues la cantidad de parciales y sumas en totales en la columna M varía para cada caso.
La macro sobrescribe hacia abajo de 3200 con cero el resto de la columna M.
En todas las celdas de la columna M hay una fórmula sencilla pre-existente (aquí está para la fila 13) de copiado de otra columna:
=SI(CELDA("tipo";F13)="r";F13;REDONDEAR(SI(CELDA("tipo";F13)="v";F13;0);0))
Al sobrescribir con cero debo volver a pegar la fórmula manualmente, salvo que la macro no sobrescriba (o la vuelva a pegar).
Gracias!

L M
658869
146275
59490
58470
240070
29000
73684
17680
34200
388149
384949
3200
fórmula
formula
etc.

En mi caso he probado la macro y no sobreescribe las fórmulas hacia abajo, se para en la última y no sigue más

Estimado Luis

Ya me he dado cuenta que es lo que causa el problema.

Los valores de la columna "L" cuya suma la macro coloca en la columna "M" no son valores entrados directamente, sino que son de una fórmula condicional que a partir de cierta fila resultan cero . Por esa razón la macro "recorre" hacia abajo todo la columna "L" aunque su valor sea cero. Como resultado de ello (no se por que!) sobrescribe la columna "M" y pierdo la fórmula que hay en sus celdas.

Gracias!

Intenta usar la macro así a ver que pasa:

Sub parciales()
Range("l6").Select
Do While ActiveCell.Value <> 0
ubica = ActiveCell.Address
ActiveCell.Offset(1, 0).Select
Do While IsNumeric(ActiveCell)
suma = suma + ActiveCell.Value
ActiveCell.Offset(1, 0).Select
Loop
Range(ubica).Offset(0, 1).Value = suma
suma = 0
Loop
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas