Sumar valores de múltiples hojas de cálculo (VBA)

Sumar valores de múltiples hojas de cálculo (VBA)

En mi libro de Excel, tengo tres hojas de cálculo separadas. Las hojas de cálculo tienen el mismo formato y representan valores de conteo para diferentes categorías (turismos, camiones, etc.). Necesito combinar las hojas de cálculo de la siguiente manera y crear un nuevo libro con los datos combinados (CombinedCount.xlsx):

='Pasajero'!B3+'Camión pesado'!B3+'Camión ligero'!B3

Hay muchas celdas para sumar y este código se aplicará a una gran cantidad de libros con exactamente el mismo formato. ¿Hay alguna manera de automatizar este proceso con algún código Python?

Respuesta1

¿Hay alguna razón particular por la que quieras hacer esto con Python? Excel puede hacer la mayor parte de esto por sí solo, con esta macro de VBA:

Sub CombineSheets()
'
' Add three identically-formatted sheets,
' putting the result into a fourth one, and then moving it to a new workbook.
'

    Sheets(1).Copy After:=Sheets(3)
    Sheets(4).Name = "Combined Counts"
    Sheets(2).Select
    Cells.Copy
    Sheets(4).Select
    Range("A1").Select
    Selection.PasteSpecial Operation:=xlAdd
    Sheets(3).Select
    Cells.Copy
    Sheets(4).Select
    Selection.PasteSpecial Operation:=xlAdd
    Sheets(4).Move
End Sub

Este

  • Hace una copia completa de la primera hoja, colocándola después de la tercera hoja. Posteriormente se puede hacer referencia a la nueva hoja como Sheets(4). Si se llama a la primera hoja Passenger, inicialmente se llamará a la nueva hoja Passenger (2).
  • Cambie el nombre de la nueva hoja Combined Counts.
  • Copie toda la segunda hoja y péguela en la nueva hoja usando la suma. (Esta es la función a la que puede acceder de forma interactiva con “Pegar” → “Pegado especial…” y luego seleccionando “Agregar” en la sección “Operación”). Y luego repita con la tercera hoja. Se ignoran los datos no numéricos (es decir, texto) de la segunda y tercera hoja. Si la primera hoja tiene texto en una celda determinada, ese texto persistirá en el resultado, incluso si una de las otras hojas tiene un número allí. (Pero esto no debería ser un problema, ya que usted dice que el formato de las hojas es idéntico).
  • Separe la nueva hoja de trabajo del libro, creando un nuevo libro de trabajo.

Luego puede guardar el nuevo libro y cerrar su ventana poniendo algo como

    Do
        fName = Application.GetSaveAsFilename( _
                            FileFilter:="Excel Workbook (*.xlsx), *.xlsx")
    Loop Until fName <> False
    ActiveWorkbook.SaveAs Filename:=fName
    ActiveWindow.Close

antes de End Sub. O podrías obtener el nombre del archivo de alguna otra manera.

Respuesta2

Usaría el complemento Power Query para esta tarea. Puede importar todos los archivos o los seleccionados desde una carpeta y crear una tabla que combine datos de cada archivo (suponiendo que tengan un diseño estándar como usted ha indicado). Por ejemplo:

http://www.excelguru.ca/blog/2013/11/26/from-txt-files-to-bi-solution/

Power Query también tiene una función Agrupar por que puede resumir datos y agregarlos, por ejemplo, Recuento, Recuento distinto, Suma, Promedio, etc.

información relacionada