Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Pivot-Wertebereich kopieren

Pivot-Wertebereich kopieren
29.10.2018 09:59:57
Manuel
Hallo Zusammen,
ich möchte gerne den Wertebereich einer Pivottabelle kopieren und in eine neues Tabellenblatt einfügen.
Wenn ich dafür bspw. das gesamte Tabellenblatt kopiere, kopiert es mir auch die Pivot auf das neue Tabellenblatt. Dies ist aber nicht gewollt.
Und wenn ich eine feste Range eingebe, stehe ich vor dem Problem, dass sobald ich den Filter verändere, die länge der Pivot natürlich eine andere ist.
Kann ich dieses Problem irgendwie lösen, in dem ich dem Code sag, kopiere ab einer festen ersten Zeile und bis der letzten Zeile die noch etwas enthält?
Könnt ihr mir dafür einen Vorschlag machen? Ich bin leider Anfänger.
Vielen Dank und beste Grüße
Manuel
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Pivot-Wertebereich kopieren
29.10.2018 15:59:16
fcs
Hallo Manuel,
es gibt unter VBA verschiedene vordefinierte Zellbereiche eines Pivotberichts, di man in Makros verwenden kann.
LG
Franz
Sub CopyPivotRange()
Dim pvTab As PivotTable
Dim wksZ As Worksheet
Dim rngCopy As Range
On Error GoTo fehler
Set pvTab = ActiveCell.PivotTable 'oder Activsheet.Pivottables(1)
Set rngCopy = pvTab.TableRange1  'gesamte Pivottabelle ohne Seitenfelder
'Set rngCopy = pvTab.TableRange2 'gesamte Pivottabelle mit Seitenfelder
'Set rngCopy = pvTab.DataBodyRange'nur Datenbereich der Pivottablle
'Set rngCopy = pvTab.ColumnRange 'nur Spaltentitel-Bereich der Pivottablle
'Set rngCopy = pvTab.DataLabelRange 'nur Zeilentitelbereich der Pivottablle
'Set rngCopy = pvTab.RowRange
'Set rngCopy = pvTab.PageRange
'Set rngCopy = pvTab.PageRangeCells
Set wksZ = ActiveWorkbook.Worksheets.Add(After:=ActiveSheet)
rngCopy.Copy
With wksZ.Range("A1")
.PasteSpecial xlPasteColumnWidths
.PasteSpecial xlPasteFormats
.PasteSpecial xlPasteValues
End With
Application.CutCopyMode = False
fehler:
With Err
Select Case .Number
Case 0
Case 1004
MsgBox "Vor dem Start des Makros Zelle in zu koperender Pivot-Tabelle plazieren"
Case Else
MsgBox "Fehler-Nr. " & .Number & vbLf & .Description, vbOKOnly, "Makro:  _
CopyPivotRange"
End Select
End With
End Sub

Anzeige
AW: Pivot-Wertebereich kopieren
30.10.2018 09:57:04
Manuel
Hallo Franz,
erstmal vielen Dank für deine Mühe!
Mir hat das bereits sehr geholfen. Allerdings kommt bei mir immer ein Fehler wenn ich am Ende des Codes, den Namen des Tabellenblatts anpassen will. Dein Code generiert ja ein neues Tabellenblatt, dies heißt dann z.B. Tabellenblatt 7,...Ziel wäre z.B. dass es heißt, "Auswertung", aber da setzt dann der Code aus.
Kannst Du mir dabei nochmal helfen? Danke!!
Das war mein Vorschlag:
Sub CopyPivotRange()
Dim pvTab As PivotTable
Dim wksZ As Worksheet
Dim rngCopy As Range
On Error GoTo fehler
Set pvTab = ActiveCell.PivotTable 'oder Activsheet.Pivottables(1)
Set rngCopy = pvTab.TableRange1  'gesamte Pivottabelle ohne Seitenfelder
'Set rngCopy = pvTab.TableRange2 'gesamte Pivottabelle mit Seitenfelder
'Set rngCopy = pvTab.DataBodyRange'nur Datenbereich der Pivottablle
'Set rngCopy = pvTab.ColumnRange 'nur Spaltentitel-Bereich der Pivottablle
'Set rngCopy = pvTab.DataLabelRange 'nur Zeilentitelbereich der Pivottablle
'Set rngCopy = pvTab.RowRange
'Set rngCopy = pvTab.PageRange
'Set rngCopy = pvTab.PageRangeCells
Set wksZ = ActiveWorkbook.Worksheets.Add(After:=ActiveSheet)
rngCopy.Copy
With wksZ.Range("A1")
.PasteSpecial xlPasteColumnWidths
.PasteSpecial xlPasteFormats
.PasteSpecial xlPasteValues
End With
Application.CutCopyMode = False
fehler:
With Err
Select Case .Number
Case 0
Case 1004
MsgBox "Vor dem Start des Makros Zelle in zu koperender Pivot-Tabelle plazieren"
Case Else
MsgBox "Fehler-Nr. " & .Number & vbLf & .Description, vbOKOnly, "Makro:  _
CopyPivotRange"
End Select
End With
ActiveSheet.Name = "Auswertung" 'HIER ist die Änderung die ich vorgenommen habe, aber es kommt  _
ein Fehler
End Sub

Anzeige
AW: Pivot-Wertebereich kopieren
02.11.2018 16:44:08
fcs
Hallo Manuel,
eiegentlich sollte deine Lösung funktionieren. Aber Fehler kommt natürlich, wenn Blatt mit dem Namen schon vorhanden.
So sollte es funktionieren mit entsprechender Fehlermeldung.
LG
Franz#

Sub CopyPivotRange()
Dim pvTab As PivotTable
Dim wksZ As Worksheet
Dim rngCopy As Range
Dim iFehler As Integer
Dim msgText$, msgTitle$
On Error GoTo fehler
iFehler = 1
Set pvTab = ActiveCell.PivotTable 'oder Activsheet.Pivottables(1)
Set rngCopy = pvTab.TableRange1  'gesamte Pivottabelle ohne Seitenfelder
'Set rngCopy = pvTab.TableRange2 'gesamte Pivottabelle mit Seitenfelder
'Set rngCopy = pvTab.DataBodyRange'nur Datenbereich der Pivottablle
'Set rngCopy = pvTab.ColumnRange 'nur Spaltentitel-Bereich der Pivottablle
'Set rngCopy = pvTab.DataLabelRange 'nur Zeilentitelbereich der Pivottablle
'Set rngCopy = pvTab.RowRange
'Set rngCopy = pvTab.PageRange
'Set rngCopy = pvTab.PageRangeCells
iFehler = 2
Set wksZ = ActiveWorkbook.Worksheets.Add(After:=ActiveSheet)
wksZ.Name = "Auswertung"
rngCopy.Copy
iFehler = 3
With wksZ.Range("A1")
.PasteSpecial xlPasteColumnWidths
.PasteSpecial xlPasteFormats
.PasteSpecial xlPasteValues
End With
Application.CutCopyMode = False
fehler:
With Err
msgText = "FehleröNr.: " & .Number & vbLf & .Description
msgTitle = "Makro: Copy_PivotRange-Fehler"
Select Case .Number
Case 0
Case 1004
Select Case iFehler
Case 1
msgText = msgText & vbLf _
& "Vor dem Start des Makros Zelle in zu koperender Pivot-Tabelle plazieren"
MsgBox msgText, vbOKOnly + vbInformation, msgTitle
Case 2
msgText = msgText & vbLf & "Blatt ""Auswertung"" ist bereits vorganden. Weiter?" _
If MsgBox(msgText, vbYesNo + vbQuestion, msgTitle) = vbYes Then
Resume Next
Else
Application.DisplayAlerts = False
wksZ.Delete
Application.DisplayAlerts = True
End If
Case Else
MsgBox msgText, vbOKOnly, msgTitle
End Select
Case Else
MsgBox msgText, vbOKOnly, msgTitle
End Select
End With
End Sub

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Pivot-Wertebereich effizient kopieren


Schritt-für-Schritt-Anleitung

Um Daten aus einer Pivot-Tabelle zu kopieren, ohne die gesamte Pivot zu duplizieren, kannst Du den folgenden VBA-Code verwenden. Dieser Code kopiert den Wertebereich einer Pivot-Tabelle in ein neues Tabellenblatt.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Klicke auf Einfügen > Modul, um ein neues Modul zu erstellen.
  3. Kopiere den folgenden Code in das Modul:
Sub CopyPivotRange()
    Dim pvTab As PivotTable
    Dim wksZ As Worksheet
    Dim rngCopy As Range
    Dim iFehler As Integer
    Dim msgText$, msgTitle$
    On Error GoTo fehler
    iFehler = 1
    Set pvTab = ActiveCell.PivotTable 'oder ActiveSheet.PivotTables(1)
    Set rngCopy = pvTab.TableRange1  'gesamte Pivottabelle ohne Seitenfelder

    iFehler = 2
    Set wksZ = ActiveWorkbook.Worksheets.Add(After:=ActiveSheet)
    wksZ.Name = "Auswertung"

    rngCopy.Copy
    With wksZ.Range("A1")
        .PasteSpecial xlPasteColumnWidths
        .PasteSpecial xlPasteFormats
        .PasteSpecial xlPasteValues
    End With

    Application.CutCopyMode = False
    Exit Sub

fehler:
    With Err
        msgText = "Fehler-Nr.: " & .Number & vbLf & .Description
        msgTitle = "Makro: Copy_PivotRange-Fehler"
        Select Case .Number
            Case 1004
                Select Case iFehler
                    Case 1
                        msgText = msgText & vbLf & "Bitte eine Zelle in der zu kopierenden Pivot-Tabelle auswählen."
                        MsgBox msgText, vbOKOnly + vbInformation, msgTitle
                    Case 2
                        msgText = msgText & vbLf & "Das Blatt ""Auswertung"" existiert bereits. Möchtest Du fortfahren?"
                        If MsgBox(msgText, vbYesNo + vbQuestion, msgTitle) = vbYes Then
                            Resume Next
                        Else
                            Application.DisplayAlerts = False
                            wksZ.Delete
                            Application.DisplayAlerts = True
                        End If
                End Select
            Case Else
                MsgBox msgText, vbOKOnly, msgTitle
        End Select
    End With
End Sub
  1. Schließe den VBA-Editor.
  2. Wähle eine Zelle innerhalb Deiner Pivot-Tabelle aus.
  3. Drücke ALT + F8, wähle CopyPivotRange und klicke auf Ausführen.

Häufige Fehler und Lösungen

  • Fehler: "Das Blatt 'Auswertung' existiert bereits."

    • Lösung: Der Code fragt, ob Du das bestehende Blatt überschreiben möchtest. Bestätige mit "Ja", um fortzufahren.
  • Fehler: "Bitte eine Zelle in der zu kopierenden Pivot-Tabelle auswählen."

    • Lösung: Stelle sicher, dass Du eine Zelle innerhalb der Pivot-Tabelle ausgewählt hast, bevor Du das Makro ausführst.

Alternative Methoden

  • Pivot-Tabelle kopieren ohne Bezug: Du kannst die Pivot-Tabelle auch manuell kopieren, indem Du den Wertebereich auswählst, mit STRG + C kopierst und mit STRG + V einfügst. Dabei wird die Pivot-Tabelle jedoch nicht dupliziert.

  • Pivot-Tabelle kopieren ohne Verknüpfung: Verwende Paste Special und wähle Werte, um sicherzustellen, dass keine Verknüpfungen zur ursprünglichen Pivot-Tabelle bestehen.


Praktische Beispiele

  • Beispiel 1: Du hast eine Pivot-Tabelle mit Verkaufsdaten und möchtest nur die Werte für einen bestimmten Zeitraum in ein neues Blatt kopieren. Wähle die Zelle in der Pivot-Tabelle aus und führe das obige Makro aus.

  • Beispiel 2: Wenn Du die Pivot-Tabelle für mehrere Monate analysieren möchtest, kannst Du das Makro mehrmals ausführen und jeweils den Wertebereich für den gewünschten Monat kopieren.


Tipps für Profis

  • Automatisierung: Du kannst das Makro anpassen, um automatisch den Namen des neuen Blattes basierend auf dem aktuellen Datum oder einem anderen Kriterium zu generieren.

  • Fehlerbehandlung erweitern: Füge zusätzliche Fehlerbehandlungen für spezifische Szenarien hinzu, um die Robustheit Deines Makros zu erhöhen.

  • Formatierung: Wenn Du die Pivot-Tabelle kopieren möchtest, ohne die Formatierung zu verlieren, nutze xlPasteAllUsingSourceTheme.


FAQ: Häufige Fragen

1. Kann ich das Makro auch in Excel Online verwenden? Das VBA-Makro funktioniert nur in der Desktop-Version von Excel. Excel Online unterstützt keine VBA.

2. Wie kann ich den kopierten Wertebereich automatisch aktualisieren? Um den kopierten Bereich automatisch zu aktualisieren, musst Du das Makro so anpassen, dass es auch den aktuellen Filter der Pivot-Tabelle berücksichtigt.

3. Ist es möglich, mehrere Pivot-Tabellen gleichzeitig zu kopieren? Ja, Du kannst das Makro erweitern, um durch alle Pivot-Tabellen im aktuellen Arbeitsblatt zu iterieren und diese nacheinander zu kopieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige