Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1160to1164
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Blattenamen Pivot. Mehrere Konsolidierungsbereiche

Blattenamen Pivot. Mehrere Konsolidierungsbereiche
windalf
Hallo,
ist es möglich bei einem Pivot auf mehrere Excelblätter noch als "zusätliches Feld" den Namen des Excelblattes in dem Pivot zu bekommen?
(Nehmen wir mal z.B. an man hätte 200 Blätter mit Daten(für jeden Tag eines) und der Blattname beinhaltet das Datum)
Jetzt könnte man natürlich auch ganz einfach per Marko bei jedem Blatt ne Spalte mit dem Blattnamen anfügen um das Problem zu lösen. (oder die Daten alle auf ein Blatt kopieren mit Blattnamen)
Meine Frage ist aber nicht wie man das Problem alternativ lösen kann, sondern ob dies im Pivot direkt möglich ist?
Danke und viele Grüße
Windi...

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

Betreff
Benutzer
Anzeige
AW: Blattenamen Pivot. Mehrere Konsolidierungsbereiche
21.06.2010 01:22:55
windalf
Hallo ok habe ich endlich selbst rausbekommen ... geht mir Seitenfeldern...
Ich wollte das ganze Pivotspielchen in nem Marko für mich beschleunigen. Allerdings habe ich ein Problem mit Variablen Feldgrößen bei einem 2-d-Array (die erste Diemension ist ja nicht frei definierbar...
Sub createFastPivot()
On Error GoTo endsub:
Dim ws As Worksheet, ws_temp As Worksheet
Dim r As Range
Dim str_range(1 To 2, 1 To 2) As String
Dim i As Long
If ActiveWorkbook.Windows(1).SelectedSheets.Count = 1 Then 'wenn nur ein Blatt markiert
Set r = Selection
If r.Cells.Count = 1 Then Set r = ActiveSheet.UsedRange
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:=r).CreatePivotTable  _
TableDestination:="", tablename:="PivotTable1", DefaultVersion:=xlPivotTableVersion10
Else 'wenn mehrere Blätter markiert, dann baue ein Pivot mit Konsolidierungsbereichen
'ReDim Preserve str_range(1 To ActiveWorkbook.Windows(1).SelectedSheets.Count)
i = 1
For Each ws In ActiveWorkbook.Windows(1).SelectedSheets
str_range(i, 1) = ws.UsedRange.Address(ReferenceStyle:=xlR1C1, External:=True)
str_range(i, 2) = ws.Name
i = i + 1
Next ws
ActiveSheet.Select  'Kann kein Pivot erstellen, wenn mehrere Blätter markiert sind...
ActiveWorkbook.PivotCaches.Add(SourceType:=xlConsolidation, SourceData:=str_range). _
CreatePivotTable TableDestination:="", tablename:="PivotTable1", DefaultVersion:=xlPivotTableVersion10
End If
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select
endsub:
End Sub

Mein Problem ist, ich will natürlich nicht, dass die erste Dimension von 1 bis 2, sondern von 1 bis ActiveWorkbook.Windows(1).SelectedSheets.Count geht. Gibt es da irgend einen Trick wie ich das Problem umgehen kann? Kann man bei SourceData:=str_range irgendwie was anderes als nen 2-d Array übergeben wenn man auch Seitenfelder nutzen möchte und wenn ja wie muss ich den Datentyp aufbauen?
Danke Gruß Windi
Anzeige
AW: Blattenamen Pivot. Mehrere Konsolidierungsbereiche
21.06.2010 09:44:15
fcs
Hallo Windi,
wenn die Zahl der Elemente bekannt ist, dann ist es kein Problem per Redim ein entsprechendes Array zu dimensionieren. Du muss dann natürlich auch beide Dimensionen definieren. Den Preserve-Parameter, der ja nur die Änderung der letzten Dimension des Arrays erlaubt, brauchst du hier nicht.
In der Variablendeklaration läßt man dann aber die Dimensionierung weg.
Gruß
Franz
Sub createFastPivot()
On Error GoTo endsub:
Dim ws As Worksheet, ws_temp As Worksheet
Dim r As Range
Dim str_range() As String
Dim i As Long
If ActiveWorkbook.Windows(1).SelectedSheets.Count = 1 Then 'wenn nur ein Blatt markiert
Set r = Selection
If r.Cells.Count = 1 Then Set r = ActiveSheet.UsedRange
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:=r).CreatePivotTable  _
_
TableDestination:="", tablename:="PivotTable1", DefaultVersion:=xlPivotTableVersion10
Else 'wenn mehrere Blätter markiert, dann baue ein Pivot mit Konsolidierungsbereichen
ReDim str_range(1 To ActiveWorkbook.Windows(1).SelectedSheets.Count, 1 To 2)
i = 1
For Each ws In ActiveWorkbook.Windows(1).SelectedSheets
str_range(i, 1) = ws.UsedRange.Address(ReferenceStyle:=xlR1C1, External:=True)
str_range(i, 2) = ws.Name
i = i + 1
Next ws
ActiveSheet.Select  'Kann kein Pivot erstellen, wenn mehrere Blätter markiert sind...
ActiveWorkbook.PivotCaches.Add(SourceType:=xlConsolidation, SourceData:=str_range). _
CreatePivotTable TableDestination:="", tablename:="PivotTable1", DefaultVersion:= _
xlPivotTableVersion10
End If
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select
endsub:
End Sub

Anzeige
AW: Blattenamen Pivot. Mehrere Konsolidierungsbereiche
21.06.2010 10:41:46
windalf
@Franz
Verdammt so einfach war das... :-)
Vielen Dank. Da habe ich was dazu gelernt. Bisher habe ich 2-d-Arrays nie verwendet (Eigentlich braucht man die ja auch nicht. Mir sind dann arrays auf arrays oder auf structs lieber, da habe ich weniger Einschränkungen und kann im nachhinein allokieren wie ich will) In dem Fall war ich dann ja leider gezwungen das mal zu verwenden, weil Excel das so haben will und schon legt man sich die Karten
Viele Dank nochmal...
Gruß Windi...

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige