![Sumar valores de múltiples hojas de cálculo (VBA)](https://rvso.com/image/1414693/Sumar%20valores%20de%20m%C3%BAltiples%20hojas%20de%20c%C3%A1lculo%20(VBA).png)
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 hojaPassenger
, inicialmente se llamará a la nueva hojaPassenger (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.