Saltar al contenido

Sumar resultados de varias sumas en un msgbox.


Recommended Posts

publicado

Hola:

Adjunto un macro que me suma por separado la columna A de 3 hojas de un libro.

Lo que necesito ahora es sumar los resultados de cada una de las hojas y me lo muestre en un MsgBox.

De paso, si podéis simplificar la macro propuesta, mejor que mejor.

Saludos.

Sumar Hojas.zip

publicado

Aprovechando el código que ya tenías hecho:

Dim r1, r2, r3 As Double

Sub Sumar1()
Sheets("Hoja1").Activate
[a1].End(xlDown).Offset(1, 0).Select
r1 = WorksheetFunction.Sum(Range("A2:A" & (Rows.Count) - 1))
ActiveCell.Value = r1
Call Módulo1.Sumar2
Call Módulo1.Sumar3
Call mostrar_suma
End Sub

Sub Sumar2()
Sheets("Hoja2").Activate
[a1].End(xlDown).Offset(1, 0).Select
r2 = WorksheetFunction.Sum(Range("A2:A" & (Rows.Count) - 1))
ActiveCell.Value = r2
End Sub

Sub Sumar3()
Sheets("Hoja3").Activate
[a1].End(xlDown).Offset(1, 0).Select
ActiveCell.Value = r3
r3 = WorksheetFunction.Sum(Range("A2:A" & (Rows.Count) - 1))
End Sub

Sub mostrar_suma()
Dim rtotal as double
rtotal = r1 + r2 + r3
MsgBox rtotal

End Sub[/CODE]

Solo he añadido 3 variables a nivel de procedimiento y les he dado a cada el valor de la suma que hacías.

Además he añadido un nuevo procedimiento que calcule el total y lance el msgbox.

Casi lo tenías

Un saludo.

publicado

Hola Salvador, una opcion:

Sub MacroAAA()
Sheets(Array("Hoja1", "Hoja2", "Hoja3")).Select
Sheets("Hoja1").Activate
Range("A5").Select
ActiveCell.Formula = "=SUM(A2:A4)"
MsgBox Hoja1.[A5] + Hoja2.[A5] + Hoja3.[A5]
End Sub[/CODE]

publicado

Mi solución iba por el mismo camino que la de Jmgcc, pero no sabía cómo crear las variables. Me ha funcionado.

La respuesta de Armando, aunque menos flexible, me sirve como idea para intentar simplificar el código.

Gracias a ambos.

publicado

Buenos días, Salvador1:

Al llegarme el correo con tu respuesta he notado un pequeño error.

En :

Sub Sumar3()
Sheets("Hoja3").Activate
[a1].End(xlDown).Offset(1, 0).Select
ActiveCell.Value = r3
r3 = WorksheetFunction.Sum(Range("A2:A" & (Rows.Count) - 1))
End Sub[/CODE]

El orden no es el correcto, no afecta al resultado del msgbox pero si a la casilla que suma en hoja3.

El orden correcto seria:

[CODE]Sub Sumar3()
Sheets("Hoja3").Activate
[a1].End(xlDown).Offset(1, 0).Select
r3 = WorksheetFunction.Sum(Range("A2:A" & (Rows.Count) - 1))
ActiveCell.Value = r3
End Sub[/CODE]

Disculpa por el error, las prisas no son buenas ,jeje.

Un saludo

publicado

Buenos días de nuevo:

La verdad, no me había dado cuenta, porque adapté el código al archivo que voy a utilizar e observando el patrón de la primera subrutina (Suma1), sin observar las siguientes.

Está bien la corrección por si le sirviera a otras personas.

Gracias por tu interés, y un saludo.

publicado

Con rango dinamico:

Sub Dinamico()
For Each Sheet In Worksheets
Sheet.[A2].End(xlDown).Offset(1) = Application.Sum(Sheet.[A2].CurrentRegion)
Next
MsgBox Application.Evaluate("=Sum(HOJA1:HOJA3!A5)")
End Sub[/CODE]

publicado

He modificado la línea de MsgBox porque, al ser dinámico, los sumandos los tiene que tomar de la última fila de cada columna (y no de A5).

MsgBox Application.Evaluate(Sheets("Hoja1").[a2].End(xlDown) + Sheets("Hoja2").[a2].End(xlDown) + Sheets("Hoja3").[a2].End(xlDown)).[/CODE]

De esta manera he podido sustituir el código largo del principio por éste, bastante más resumido.

Gracias a todos.

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.