sumar celdas con macro

10/04/2007 - 19:42 por giovany | Informe spam
tengo un problema quiero hacer esto:
ActiveCell.FormulaR1C1 = "=SUM(RC[-3]:RC[-1])"
Range("D1").Select
Selection.AutoFill Destination:=Range("D1:D5"), Type:=xlFillDefault
lo que es tomar un rango de celdas y sumar pero esta funcion no me sirve por
que necesito hacerlo desde cualquier rango de celdas, trato de utilizar este
metodo:

For i = 1 To 31
Cells(5 + i, ftotal) = "=SUMA(" & Cells(5 + i, 2) & ":" &
Cells(5 + i, ftotal) & ")"
Next i

pero me da error, ftotal es la posicion donde empieza a sumar toda la fila
en la columna total. gracias por cualquier respuesta

Preguntas similare

Leer las respuestas

#1 David
10/04/2007 - 21:52 | Informe spam
No te capté muy bien lo que quieres hacer, así que traté de hacer algo para
que tu segunda propuesta funcionara. Veamos si llegamos a algo que te sea
útil.

Si no estoy mal encaminado, veo que lo que quieres hacer es calcular la suma
de las celdas a la izquierda de la activa, y eso para 31 filas. El problema
es que estás cometiendo tres errores:

1. Desde VBA, debes utilizar los nombres de las funciones en inglés: en
lugar de =SUMA( ), prueba con =SUM( ). Si en lo sucesivo necesitas una
función que no conoces, puedes ingresarla manualmente en una celda, luego la
seleccionas, vas al editor de VBA y después de pulsar Control+G escribes:

msgbox activecell.Formula

2. Cuando construyes una fórmula desde el código, debes concatenar una
expresión que te genere las direcciones de celda de los rangos involucrados.
En tu caso, pones Cells(5 + i, 2), lo que te devolverá el valor contenido en
esa celda, no su dirección. Prueba cambiarla por algo como: Cells(5 + i,
2).Address.

3. El segundo parámetro del rango en la función, te produce una fórmula
circular. Cuando pones Cells(5 + i, ftotal ), te estás refiriendo a la misma
celda que recibe la función. Yo lo cambiaría por Cells(5 + i, ftotal - 1).

Ahora, uniendo esas tres ideas, probé con lo siguiente yme funcionó.
Revísalo para ver si es lo que buscabas, y comentas cómo te fue:

Sub SumarCeldas()
Dim ftotal as Integer
ftotal = 7
For i = 1 To 31
Cells(5 + i, ftotal).Formula = _
"=SUM(" & Cells(5 + i, 2).Address _
& ":" & Cells(5 + i, ftotal - 1).Address & ")"
Next i
End Sub



"giovany" escribió:

tengo un problema quiero hacer esto:
ActiveCell.FormulaR1C1 = "=SUM(RC[-3]:RC[-1])"
Range("D1").Select
Selection.AutoFill Destination:=Range("D1:D5"), Type:=xlFillDefault
lo que es tomar un rango de celdas y sumar pero esta funcion no me sirve por
que necesito hacerlo desde cualquier rango de celdas, trato de utilizar este
metodo:

For i = 1 To 31
Cells(5 + i, ftotal) = "=SUMA(" & Cells(5 + i, 2) & ":" &
Cells(5 + i, ftotal) & ")"
Next i

pero me da error, ftotal es la posicion donde empieza a sumar toda la fila
en la columna total. gracias por cualquier respuesta
Respuesta Responder a este mensaje
#2 giovany
11/04/2007 - 07:06 | Informe spam
muchas gracias, eso era lo que necesitaba.

sustituir Range("A1:G1") por una donde el sistema seleccionara el rango de
celdas, ya que por este metodo no puedo hacerlo, ademas el de ingresar una
formula a una celda, me ha servido mucho, te agradezco la ayuda

"David" escribió:

No te capté muy bien lo que quieres hacer, así que traté de hacer algo para
que tu segunda propuesta funcionara. Veamos si llegamos a algo que te sea
útil.

Si no estoy mal encaminado, veo que lo que quieres hacer es calcular la suma
de las celdas a la izquierda de la activa, y eso para 31 filas. El problema
es que estás cometiendo tres errores:

1. Desde VBA, debes utilizar los nombres de las funciones en inglés: en
lugar de =SUMA( ), prueba con =SUM( ). Si en lo sucesivo necesitas una
función que no conoces, puedes ingresarla manualmente en una celda, luego la
seleccionas, vas al editor de VBA y después de pulsar Control+G escribes:

msgbox activecell.Formula

2. Cuando construyes una fórmula desde el código, debes concatenar una
expresión que te genere las direcciones de celda de los rangos involucrados.
En tu caso, pones Cells(5 + i, 2), lo que te devolverá el valor contenido en
esa celda, no su dirección. Prueba cambiarla por algo como: Cells(5 + i,
2).Address.

3. El segundo parámetro del rango en la función, te produce una fórmula
circular. Cuando pones Cells(5 + i, ftotal ), te estás refiriendo a la misma
celda que recibe la función. Yo lo cambiaría por Cells(5 + i, ftotal - 1).

Ahora, uniendo esas tres ideas, probé con lo siguiente yme funcionó.
Revísalo para ver si es lo que buscabas, y comentas cómo te fue:

Sub SumarCeldas()
Dim ftotal as Integer
ftotal = 7
For i = 1 To 31
Cells(5 + i, ftotal).Formula = _
"=SUM(" & Cells(5 + i, 2).Address _
& ":" & Cells(5 + i, ftotal - 1).Address & ")"
Next i
End Sub



"giovany" escribió:

> tengo un problema quiero hacer esto:
> ActiveCell.FormulaR1C1 = "=SUM(RC[-3]:RC[-1])"
> Range("D1").Select
> Selection.AutoFill Destination:=Range("D1:D5"), Type:=xlFillDefault
> lo que es tomar un rango de celdas y sumar pero esta funcion no me sirve por
> que necesito hacerlo desde cualquier rango de celdas, trato de utilizar este
> metodo:
>
> For i = 1 To 31
> Cells(5 + i, ftotal) = "=SUMA(" & Cells(5 + i, 2) & ":" &
> Cells(5 + i, ftotal) & ")"
> Next i
>
> pero me da error, ftotal es la posicion donde empieza a sumar toda la fila
> en la columna total. gracias por cualquier respuesta
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida