![Werte aus mehreren Tabellenblättern addieren (VBA)](https://rvso.com/image/1414693/Werte%20aus%20mehreren%20Tabellenbl%C3%A4ttern%20addieren%20(VBA).png)
In meiner Excel-Arbeitsmappe habe ich drei separate Tabellenblätter. Die Tabellenblätter haben das gleiche Format und stellen Zählwerte für verschiedene Kategorien dar (Pkw, Lkw usw.). Ich muss die Tabellenblätter folgendermaßen kombinieren und eine neue Arbeitsmappe mit den kombinierten Daten erstellen (CombinedCount.xlsx):
='Personenkraftwagen'!B3+'Schwerlast-LKW'!B3+'Leichte Lastwagen'!B3
Es müssen viele Zellen addiert werden, und dieser Code wird auf eine große Anzahl von Arbeitsmappen mit genau demselben Format angewendet. Gibt es eine Möglichkeit, diesen Prozess mit Python-Code zu automatisieren?
Antwort1
Gibt es einen besonderen Grund, warum Sie dies mit Python tun möchten? Excel kann das meiste davon selbst erledigen, mit diesem VBA-Makro:
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
Das
- Erstellt eine vollständige Kopie des ersten Blattes und platziert es hinter dem dritten Blatt. Das neue Blatt kann anschließend als referenziert werden
Sheets(4)
. Wenn das erste Blatt als bezeichnet wirdPassenger
, dann wird das neue Blatt zunächst als bezeichnetPassenger (2)
. - Benennen Sie das neue Blatt um
Combined Counts
. - Kopieren Sie das gesamte zweite Blatt und fügen Sie es mithilfe der Addition in das neue Blatt ein. (Auf diese Funktion können Sie interaktiv zugreifen, indem Sie „Einfügen“ → „Inhalte einfügen …“ wählen und dann im Abschnitt „Operation“ „Hinzufügen“ auswählen.) Und wiederholen Sie dies dann mit dem dritten Blatt. Nicht numerische Daten (also Text) auf dem zweiten und dritten Blatt werden ignoriert. Wenn das erste Blatt Text in einer bestimmten Zelle enthält, bleibt dieser Text im Ergebnis erhalten, auch wenn eines der anderen Blätter dort eine Zahl enthält. (Aber das sollte kein Problem sein, da Sie sagen, dass die Blätter im Format identisch sind.)
- Trennen Sie das neue Arbeitsblatt vom Buch und erstellen Sie eine neue Arbeitsmappe.
Sie können dann die neue Arbeitsmappe speichern und ihr Fenster schließen, indem Sie etwas wie
Do
fName = Application.GetSaveAsFilename( _
FileFilter:="Excel Workbook (*.xlsx), *.xlsx")
Loop Until fName <> False
ActiveWorkbook.SaveAs Filename:=fName
ActiveWindow.Close
vor dem End Sub
. Oder Sie können den Dateinamen auf andere Weise ermitteln.
Antwort2
Ich würde für diese Aufgabe das Power Query-Add-In verwenden. Es kann alle oder ausgewählte Dateien aus einem Ordner importieren und eine Tabelle erstellen, die Daten aus jeder Datei kombiniert (vorausgesetzt, sie haben ein Standardlayout, wie Sie angegeben haben). Beispiel:
http://www.excelguru.ca/blog/2013/11/26/from-txt-files-to-bi-solution/
Power Query verfügt auch über eine „Group By“-Funktion, mit der Daten zusammengefasst und aggregiert werden können, z. B. „Anzahl“, „Anzahl einzelner“, „Summe“, „Durchschnitt“ usw.