Frage von PCnoob134, 26

Excel 2010 Makros mit Pivot?

Ich habe erfolgreich ein Makro für die automatische Erstellung einer Pivot Tabelle und deren Auswertung aus einem Datensatz erstellt.

Das Problem ist, dass nicht alle Datensätze gleich viele Zeilen haben, folglich funktioniert das Makro nicht mit einem anderen Datensatz.

Ist es möglich die so zu verallgemeinern dass es auch mit unterschiedlichen Zeilenanzahlen funktioniert? Spalten bleiben immer gleich.

Expertenantwort
von Ninombre, Community-Experte für Excel, 22

Wie sieht denn der jetzige Code aus? Da wird irgendwo ein fester Zeilenwert drin stehen, der muss durch eine Variable ersetzt werden. Für diese Variable ermittelt man dann den letzten Wert bzw. die letzte Zeile:

An der Stelle wo sourcedata auftaucht, musst Du eingreifen. Wenn Du das Ganze über den Makrorekorder aufgezeichnet hast, ist die Angabe der Datenquelle etwas sonderbar. Du kannst das ersetzen durch:

SourceData:=Range("A1:B" & Cells(Rows.Count, 1).End(xlUp).Row)

das cells(rows...) ermittelt die letzte verwendete Zeile in Spalte A (das ist die fettgedruckte 1 für die erste Spalte, also A)

Kommentar von PCnoob134 ,

Habe es mit dem Recorder aufgenommen. Probiere jetzt mal deinen Vorschlag.

Für was steht das B in deiner Datenquelle?

Das ist meine Datenqulle: SourceData:= _
     "Tabelle1!R1C1:R631C9"

Und dass der Zielort:

CreatePivotTable _
        TableDestination:="Tabelle4!R3C1"

Vermutlich muss ich den Zielort ebenfalls anpassen oder? Habe leider recht wenig Ahnung von dem Ganzen...

Kommentar von Ninombre ,

Das B ist bei mir die zweite Spalte, ich habe im Beispiel nur eine Pivottabelle über Spalte A und B erstellt.

Die Schreibweise, die der Makrorekorder aufzeichnet, mit R1C1, ist Row(Zeile) 1, Column(Spalte) 1, also A1 auf "gut deutsch" -> andere Reihenfolge als in den Formeln, wo Du ja zuerst die Spalte angibst.

Die Quelle ist im Script R1C1:R631C9 ist also A1:I631

Wenn Spalte A immer gefüllt ist (das ist wichtig, um die letzte verwendete Zeile zu ermitteln), kannst Du aus beim bisherigen Eintrag sourcedata machen:

SourceData:=Range("A1:I" & Cells(Rows.Count, 1).End(xlUp).Row)

Wenn die Spalte A ungeeignet ist, um verlässlich den letzten Eintrag zu ermitteln, dann musst Du nur die Zahl oben anpassen, dass die letzte Zeile in einer anderen Spalte gesucht wird. Was hier vielleicht irritiert ist die Schreibweise mit cells, da werden Zeilen und Spalten nummerisch angegeben: Spalte C ist dann halt 3, aber auch in der Reihenfolge erst Zeile dann Spalte.


TableDestination legt fest, an welcher Stelle die Pivottabelle erstellt wird. Das hat nichts mit den Quelldaten zu tun. Wenn der Ort passt, dann kannst Du das so lassen wie es ist. Allerdings: Du hast ja geschrieben, dass mehrere Pivottabellen erstellt werden sollen. Wenn die alle auf dem gleichen Tabellenblatt landen, dann muss der Ort auch dynamisch werden, genauso wie die Bezeichnung/Name für die Pivottabellen.


Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten