Sumar totales de varias hojas

Hola muy buen día, de antemano muchas gracias por si puedes colaborarme, mi pregunta es la siguiente tengo un libro de excel con varias hojas, cada hoja pertenece a un vendedor, yo ya hice el código para que me hiciera los respectivos arreglos en cada hoja y me de un total, lo que quiero es mediante código en una hoja nueva (o resumen) me sume todos los totales de cada hoja.
pd la cantidad de hojas del libro varían cada mes, así como en un mes puedo tener tres vendedores al siguiente mes pueden ser cinco o seis

2 Respuestas

Respuesta
1
Lo primero es saber si los totales están en la misma celda en cada hoja y si siempre es la misma celda.
Si esto no fuera así, por lo menos saber si el total está en la misma columna en cada hoja y si siempre está en la última fila ocupada de la columna.
Si no se diera alguna de las alternativas anteriores, especifícame mejor cual es el caso.
¿Es aleatoria la celda en la que se almacena el resultado de cada hoja o está bien definida?
En primer lugar gracias por responder, mira el total es aleatorio siempre va a cambiar de celda, aunque yo tenia un código para buscar la palabra "total" y que me coja el dato que esta al lado,
Ok, el problema no es tan complicado, pero necesito que definamos la forma en que encontraremos la celda en que se almacena el total.
Necesito saber esto: ¿Cómo encontramos esa celda?
Si utilizas la función para buscar la palabra total, envíame el código.
For fila = 5 To 100
If Cells(fila, 1).Value = "TOTAL" Then
ActiveCell.Offset(0, 1).Select
Selection.copy
End If
Next
O sea con este código yo busco en la hoja la palabra total y copio la celda de enseguida, pero necesito entonces ese valor guardarlo en una variable para luego sumarlos junto con los demás valores de las otras hojas y dar el valor total en una hoja resumen, yo tenia la idea de ir pegando los valores totales de las hojas e irlas pegando en la hoja final de resumen junto con el nombre de la hoja, pero se me dificulta cuando cambia el numero de hojas
No indicas la columna, pero si la palabra total aparece sólo una vez en la hoja, puedes utilizar este procedimiento para obtener la celda en que aparece la palabra "TOTAL"
'Retorna el valor de la celda que está ala derecha del cuadro que contiene la palabra buscada
'por defecto, la palabra "TOTAL"
Function fcnDevolTotal(hojaBusq As Worksheet, Optional strBuscar As String="TOTAL") As String
    Dim resulta As Range
    Set resulta = hojaBusq.UsedRange.Find(strBuscar, LookIn:=xlValues, LookAt:=xlWhole)
    If Not resulta Is Nothing Then
        fcnDevolTotal = resulta.Offset(0, 1).Value
    End If
End Function

Ahora haremos la función que recorre todas las hojas buscando el total y sumandolos
Function fcnCalcTotal() As Double
    For i = 1 To Sheets.Count
        FcnCalcTotal = fcnCalcTotal + fcnBuscar2(Sheets(i), "TOTAL")
'El valor TOTAL está demás, ya que es el valor por defecto, pero lo agrego para que notes que puede ser cualquier valor
    Next
End Function

Ahora asignamos el valor resultante a una celda determinada, ejemplo A1 de la hoja Resumen.
Debes considerar que si la hoja resumen tiene un camplo llamado TOTAL, también lo considerará, así que le puedes poner Total Mes o algo así.
Sheets("Resumen").Cells(1,1) = fcnCalcTotal()
Espero te sirva.
Saludos.

Hola, ya la pegue en un modulo pero no me corre
Sheets("Resumen").Cells(1,1) = fcnCalcTotal()
Debe poner esta línea dentro de una macro que la ejecute ¿Lo hiciste?
Hola, hice lo que me dijiste pero al correrla me muestra un error de compilación en donde dice que no se ha definido Sub o Function y me marca la linea en donde esta fcnBuscar2
Fue un error mío.
Reemplaza fcnBuscar2 por fcnDevolTotal.
Hola, mía hice lo que me dijiste de remplazar, pero cuando recorre todas las hojas no me da el resultado en la hoja resumen si no que me aparece un error de compilación que dice que los tipos no coinciden
Ese error aparece cuando (en este caso) intentas sumar dos elementos de distinto tipo, o sea un número y una cadena, por ejemplo.
Lo más probable es que en todos los valores que toma, haya alguna celda que esté vacía, por lo que, al sumar un número con la cadena vacía, te da el error de tipo.
¿Estás seguro que todas las hojas tienen un total asignado?
Verifica esto y si es así y con esto, aún te envía error, dime en qué linea te da el error. Eso lo puedes saber presionan "Depurar" cuando te aparece el mensaje de error.
Si todas están con el valor asignado. Tengo cinco hojas A; B;C;D;E;F creo que de pronto aquí este el error y a la ultima hoja o sea a la séptima hoja le doy el nombre de resumen (no se si esta hoja la crea el código o debo crearla) el código me hace el recorrido normal de las hojas pero cuando llega a la séptima aparece el error de compilación en donde dice que no coinciden los tipos.)
Function fcnDevolTotal(hojaBusq As Worksheet, Optional strBuscar As String="TOTAL") As String
    Dim resulta As Range
    Set resulta = hojaBusq.UsedRange.Find(strBuscar, LookIn:=xlValues, LookAt:=xlWhole)
    If Not resulta Is Nothing Then
        fcnDevolTotal = resulta.Offset(0, 1).Value
    End If
End Function
______________________________________________________________________________________________
Function fcnCalcTotal() As Double
    For i = 1 To Sheets.Count
        fcnCalcTotal = fcnCalcTotal + fcnDevolTotal(Sheets(i), "TOTAL")
    Next
End Function
____________________________________________________________________________________________
sub sumar ()
Sheets("Resumen").Cells(1,1) = fcnCalcTotal()
end sub
Este es el código que pegue en un modulo. O sea si tengo 6 hojas y la hoja resumen el contador queda en 7 o sea que el código toma la hoja resumen también.
Cuando te envíe la macro coloqué esta aclaración
"Debes considerar que si la hoja resumen tiene un campo llamado TOTAL, también lo considerará, así que le puedes poner Total Mes o algo así."
¿La consideraste?
El campo donde se almacena el Total del resumen no se debe llamar TOTAL a secas. De otra forma, tendrías que validar que no consulte por el total cuando estés en la hoja llamada resumen.
Function fcnCalcTotal() As Double
    For i = 1 To Sheets.Count
        if LCase(Sheets(i).Name) <> "resumen" Then fcnCalcTotal = fcnCalcTotal + fcnDevolTotal(Sheets(i), "TOTAL")
    Next
End Function
Nota: Ten la precaución de escribir el nombre de la hoja resumen con minúsculas.
Ya sabes, cualquier consulta, me la comunicas!
Respuesta
1
Que pena contigo, no te puedo colaborar con lo que necesitas ya que no soy experto en VBA

Añade tu respuesta

Haz clic para o