Sumar datos de varias hojas en una hoja acumulativa

Saludo cordial. Recurro nuevamente a tu ayuda para lo siguiente:
Estoy trabajando una macro en Excel que contiene una determinada cantidad de hojas de datos (el numero puede variar) y una hoja llamada Data. Todas tienen la misma estructura, lo que deseo es sumar todos los datos de una celda de cada hoja y que el resultado aparezca en la misma celda de la hoja Data. A pie la fórmula es algo así: La celda A1 de Data sería =Hoja1! A1+Hoja2! A1+Hoja3!A1... Así sucesivamente para todas las hojas del archivo. La cantidad de hojas del archivo y el nombre de cada una los puedo obtener de una hoja oculta que tiene los nombres de las hojas.
¿Cuál sería el código para hacer esto? Puedes darme las indicaciones suponiendo que son unas 3 hojas y yo lo extiendo a las que necesito.
Agradezco de antemano su atención y ayuda.

1 respuesta

Respuesta
1
Para eso tendrías que hacer una función Personal. Aquí te hice una que tal vez te sirva. Puedes modificar el rango de la celda a sumar.
Function SumarCeldas(cell)
      Dim ValorDato As Double
      Dim Addr As String
      Dim Wksht As Object
      Application.Volatile
      Addr = cell.Range("A1").Address
      For Each Wksht In cell.Parent.Parent.Worksheets
               If Wksht.Name = cell.Parent.Name And _
                             Addr = Application.Caller.Address Then
                             ' Evitar la referencia circular
               Else
                         ValorDato = ValorDato + Wksht.Range(Addr).Value
               End If
      Next Wksht
SumarCeldas = ValorDato
End Function

Esta función la puedes llamar desde cualquier celda de la siguiente forma:
=SumarCeldas(A1)
Y listo, te suma todos los datos que estén en la celda A1 de las hojas. No importa si mueves o eliminas hojas, la función siempre se recalculará.
Espero te sirva, saludos
[email protected]
[email protected]
Hola, Gracias por tu respuesta.
La verdad no probé la solución que me diste porque finalmente encontré una forma de hacerlo:
For ini = 1 To registros
    Str = "=" & hojas(1) & "!E" & CStr(ini) & ""
    For i = 2 To cantidadHojas
        a = hojas(i)
        Str = Str & "+" & a & "!E" & CStr(ini) & ""
    Next
    Cells(ini, x).Activate
    ActiveCell.FormulaLocal = Str
Next
Donde:
Registros: Me dice cuantas lineas debo totalizar
Str: cadena en la que voy guardando la que finalmente será la fórmula de la celda
hojas: Arreglo en el que tengo guardado el nombre de las hojas que debo sumar
cantidadHojas: Me dice cuantas hojas hay (es la longitud de un arreglo)
a: Me guarda la primera parte de la cadena

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas