Werte aus mehreren Tabellenblättern addieren (VBA)

Werte aus mehreren Tabellenblättern addieren (VBA)

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 wird Passenger, dann wird das neue Blatt zunächst als bezeichnet Passenger (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.

verwandte Informationen