Pivot Variablen aggregieren

Hallo zusammen

Ich habe folgendes (zugegeben etwas kompliziert beschriebenes) Problem:

Ich habe eine Tabelle mit Daten, die ungefähr so aussieht:

Datum FirmaA_Wert FirmaB_Wert FirmaC_Wert
1.2.08 positiv (leer) (leer)
2.3.08 (leer) negativ positiv

Wenn ich diese Tabelle nun als Pivot anzeigen lasse, kann ich den Wert nur pro Firma ablesen. Ich möchte den Wert aber unabhängig von der Firma herausfinden, also dass es mir angibt, dass am 2.3.08 einmal positiv und einmal negativ vorhanden ist.

Wenn ich FirmaA_Wert und FirmaB_Wert in die Zeilen ziehe, werden die Werte verschachtelt angezeigt. Gibt es eine Möglichkeit, einen Operator „oder“ einzufügen? Oder muss ich die Tabelle neu gruppieren? Und mit welchen Befehlen mache ich das dann am besten?

Ich hoffe, es war einigermassen verständlich…

Ich hab Excel 2007

Ein grosses Dankeschön und frohe Ostern!
Christine

Noch zum Umgruppieren der Tabelle, ich möchte, dass die Tabelle anstatt so:

Datum FirmaA_Wert FirmaB_Wert FirmaC_Wert
1.2.08 positiv (leer) (leer)
2.3.08 (leer) negativ positiv

neu so aussieht:

Datum Firma Wert
1.2.08 A positiv
2.3.08 B negativ
2.3.08 C positiv

Da die Tabelle in Wirklichkeit viel grösser ist, möchte ich das Ganze natürlich nicht von Hand machen, sondern suche passende Befehle dafür, die ich evtl. sogar als Makro abspeichern könnte, weil ich jeden Monat wieder eine Tabelle mit neuen Werten bekomme und vor demselben Problem stehe.

Grüezi Drusilla

Noch zum Umgruppieren der Tabelle, ich möchte, dass die
Tabelle anstatt so:

Datum FirmaA_Wert FirmaB_Wert FirmaC_Wert
1.2.08 positiv (leer) (leer)
2.3.08 (leer) negativ positiv

neu so aussieht:

Datum Firma Wert
1.2.08 A positiv
2.3.08 B negativ
2.3.08 C positiv

Ja, das ist die einzige saubere Listen-Erfassung die dann auch eine problemlose Auswertung erlaubt.

Da die Tabelle in Wirklichkeit viel grösser ist, möchte ich
das Ganze natürlich nicht von Hand machen, sondern suche
passende Befehle dafür, die ich evtl. sogar als Makro
abspeichern könnte, weil ich jeden Monat wieder eine Tabelle
mit neuen Werten bekomme und vor demselben Problem stehe.

Kannst Du nicht dafür sorgen, dass die Daten gleich in dieser Form erfasst werden?
Das wäre einfacher und vor allem sicherer, als die Daten jedesmal umzuschreiben.

Ansonsten müsstest Du dies mit einem Makro oder entsprechenden Formeln umwandeln damit es klappt.


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Grüezi Drusilla - ich nochmals :smile:

Ansonsten müsstest Du dies mit einem Makro oder entsprechenden
Formeln umwandeln damit es klappt.

Das Umwandeln mit Formeln könnte dann z.b. wie folgt aussehen:

Tabellenblatt: [MAPPE1]!Tabelle1
 │ A │ B │ C │ D │
───┼────────────┼─────────┼─────────┼─────────┤
 1 │ Datum │ FirmaA │ FirmaB │ FirmaC │
───┼────────────┼─────────┼─────────┼─────────┤
 2 │ 01.02.2008 │ positiv │ │ │
───┼────────────┼─────────┼─────────┼─────────┤
 3 │ 02.03.2008 │ │ negativ │ positiv │
───┼────────────┼─────────┼─────────┼─────────┤
 4 │ │ │ │ │
───┼────────────┼─────────┼─────────┼─────────┤
 5 │ │ │ │ │
───┼────────────┼─────────┼─────────┼─────────┤
 6 │ │ │ │ │
───┼────────────┼─────────┼─────────┼─────────┤
 7 │ │ │ │ │
───┼────────────┼─────────┼─────────┼─────────┤
 8 │ │ │ │ │
───┼────────────┼─────────┼─────────┼─────────┤
 9 │ │ │ │ │
───┼────────────┼─────────┼─────────┼─────────┤
10 │ │ │ │ │
───┼────────────┼─────────┼─────────┼─────────┤
11 │ │ │ │ │
───┼────────────┼─────────┼─────────┼─────────┤
12 │ Datum │ Firma │ Wert │ │
───┼────────────┼─────────┼─────────┼─────────┤
13 │ 01.02.2008 │ FirmaA │ positiv │ │
───┼────────────┼─────────┼─────────┼─────────┤
14 │ 01.02.2008 │ FirmaB │ 0 │ │
───┼────────────┼─────────┼─────────┼─────────┤
15 │ 01.02.2008 │ FirmaC │ 0 │ │
───┼────────────┼─────────┼─────────┼─────────┤
16 │ 02.03.2008 │ FirmaA │ 0 │ │
───┼────────────┼─────────┼─────────┼─────────┤
17 │ 02.03.2008 │ FirmaB │ negativ │ │
───┼────────────┼─────────┼─────────┼─────────┤
18 │ 02.03.2008 │ FirmaC │ positiv │ │
───┼────────────┼─────────┼─────────┼─────────┤
19 │ 00.01.1900 │ FirmaA │ 0 │ │
───┼────────────┼─────────┼─────────┼─────────┤
20 │ 00.01.1900 │ FirmaB │ 0 │ │
───┼────────────┼─────────┼─────────┼─────────┤
21 │ 00.01.1900 │ FirmaC │ 0 │ │
───┴────────────┴─────────┴─────────┴─────────┘
Benutzte Formeln:
A13: =INDEX($A$2:blush:A$10;KÜRZEN((ZEILE(A1)-1)/3;0)+1)
B13: =INDEX($B$1:blush:D$1;1;REST(ZEILE(A1)-1;3)+1)
C13: =INDEX($B$2:blush:D$10;KÜRZEN((ZEILE(A1)-1)/3;0)+1;REST(ZEILE(A1)-1;3)+1)

Tabellendarstellung erreicht mit dem Code in FAQ:2363


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Hallo Thomas

klappt super - vielen vielen Dank! :smile:

ein ganz ganz kleines Problemchen hab ich noch. In meiner Originaltabelle sind die Spalten FirmaA_wert, FirmaB_wert und FirmaC_wert nämlich nicht nebeneinander, sondern jeweils dazwischen sind FirmaA_bereich, FirmaB_bereich und FirmaC_bereich.

Kann man deine Formel so abändern, dass es trotzdem klappt? Hab versucht, die Spalten dann einzeln anzuwählen, aber das hat mir eine Fehlermeldung gegeben - hab ich was falsch gemacht oder geht die Index-Formel nur bei Zellen, die nebeneinander sind?

Gruss, Drusilla

Benutzte Formeln:
A13: =INDEX($A$2:blush:A$10;KÜRZEN((ZEILE(A1)-1)/3;0)+1)
B13: =INDEX($B$1:blush:D$1;1;REST(ZEILE(A1)-1;3)+1)
C13:
=INDEX($B$2:blush:D$10;KÜRZEN((ZEILE(A1)-1)/3;0)+1;REST(ZEILE(A1)-1;3)+1)

Grüezi Drusilla

klappt super - vielen vielen Dank! :smile:

Aber soweit gerne doch…

ein ganz ganz kleines Problemchen hab ich noch. In meiner
Originaltabelle sind die Spalten FirmaA_wert, FirmaB_wert und
FirmaC_wert nämlich nicht nebeneinander, sondern jeweils
dazwischen sind FirmaA_bereich, FirmaB_bereich und
FirmaC_bereich.

Kann man deine Formel so abändern, dass es trotzdem klappt?

Ja, das kann man - dazu muss ich mich aber nochmals intensiver damit befassen

Hab versucht, die Spalten dann einzeln anzuwählen, aber das
hat mir eine Fehlermeldung gegeben - hab ich was falsch
gemacht oder geht die Index-Formel nur bei Zellen, die
nebeneinander sind?

Nein, aber die dazwischen liegenden Spalten müssen berücksichtigt, in diesem Falle hier ausgelassen werden.
Einmal mehr schade, dass die konkrete Problemstellung nicht von Beginn weg offen gelegt war - das macht, wie hier zu sehen ist, wenig Sinn und einiges mehr an Aufwand.

Ich sehs mir nochmals an - aber nicht mehr heute Nacht.


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Einmal mehr schade, dass die konkrete Problemstellung nicht

von Beginn weg offen gelegt war - das macht, wie hier zu sehen
ist, wenig Sinn und einiges mehr an Aufwand.

naja, dann möchte ich aber auch kritik anbringen:
mir geht es ja auch darum, zu verstehen, was du gemacht hast, damit ich’s später mal anwenden kann, da hilft mir die blosse formel nicht viel…

Grüezi Drusilla

Einmal mehr schade, dass die konkrete Problemstellung nicht

von Beginn weg offen gelegt war - das macht, wie hier zu sehen
ist, wenig Sinn und einiges mehr an Aufwand.

naja, dann möchte ich aber auch kritik anbringen:

…wer hat denn hier von Kritik gesprochen - ich bin bloss müde nach einem langen Tag und ein wenig demotiviert ob der neuen Ausgangslage…

…aber das ist vielleicht nur mein Problem, auch nachdem ich die erste Antwort bereits erhalten hatte…

mir geht es ja auch darum, zu verstehen, was du gemacht hast,
damit ich’s später mal anwenden kann, da hilft mir die blosse
formel nicht viel…

Ja, klar - doch die Online-Hilfe zu den Funktionen steht dir wahrscheinlich auch zur Verfügung - dort findest Du einiges über INDEX().
Die restlichen Formeln dienen nur dem mathematischen Ermitteln der Nummern von Zeilen- und Spalten um diese dann als Argumente in INDEX() zu verwenden.

Eine Idee ist es auch die Bestandteile in eigene Zellen zu schreiben und zu beobachten wie sie sich verändern, wenn Du sie nach unten und/oder rechts kopierst.

Alles in allem ist es keine Hexerei sondern deduktisches Vorgehen und am Ende zusammenbauen - aber das braucht ein wenig Zeit und einen frischen Kopf :wink:

Nix für ungut, gell!


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Grüezi Drusilla

…wer hat denn hier von Kritik gesprochen - ich bin bloss
müde nach einem langen Tag und ein wenig demotiviert ob der
neuen Ausgangslage…

Sodele - das Anpassen hat sich mit frischem Kopf dann reduziert auf das zusätzliche Einbringen einer einfachen Mulitplikation :smile:

Da jeden Monat diese Daten anfallen (besser wäre es IMO immer noch, gleich bei der Erstellung der Daten auf korrektes Listenformat zu drängen) könntest Du eine Mappe entsprechend vorbereiten und in einem neuen Tabellenblatt, das dann als Ausgangsbasis für die Pivot-Tabelle dient, die Formeln einpflegen und dann nur die Daten austauschen. Die Formeln bringen diese dann in die richtige Form.

Angenommen dein Blatt sieht wie folgt aus:

Tabellenblatt: [MAPPE1]!Ausgabexyz
 │ A │ B │ C │ D │ E │ F │ G │
──┼────────────┼─────────────┼────────────────┼─────────────┼────────────────┼─────────────┼────────────────┤
1 │ Datum │ FirmaA\_Wert │ FirmaA\_Bereich │ FirmaB\_Wert │ FirmaB\_Bereich │ FirmaC\_Wert │ FirmaC\_Bereich │
──┼────────────┼─────────────┼────────────────┼─────────────┼────────────────┼─────────────┼────────────────┤
2 │ 01.02.2008 │ positiv │ │ │ │ │ │
──┼────────────┼─────────────┼────────────────┼─────────────┼────────────────┼─────────────┼────────────────┤
3 │ 02.03.2008 │ │ │ negativ │ │ positiv │ │
──┼────────────┼─────────────┼────────────────┼─────────────┼────────────────┼─────────────┼────────────────┤
4 │ │ │ │ │ │ │ │
──┴────────────┴─────────────┴────────────────┴─────────────┴────────────────┴─────────────┴────────────────┘

Dann kannst Du in einem eigenen Tabellenblatt die folgenden drei Funktionen einsetzen, die sich auf diese Daten beziehen:

Tabellenblatt: [MAPPE1]!Quelldaten\_PT
 │ A │ B │ C │
───┼────────────┼─────────────┼─────────┤
 1 │ Datum │ Firma │ Wert │
───┼────────────┼─────────────┼─────────┤
 2 │ 01.02.2008 │ FirmaA\_Wert │ positiv │
───┼────────────┼─────────────┼─────────┤
 3 │ 01.02.2008 │ FirmaB\_Wert │ 0 │
───┼────────────┼─────────────┼─────────┤
 4 │ 01.02.2008 │ FirmaC\_Wert │ 0 │
───┼────────────┼─────────────┼─────────┤
 5 │ 02.03.2008 │ FirmaA\_Wert │ 0 │
───┼────────────┼─────────────┼─────────┤
 6 │ 02.03.2008 │ FirmaB\_Wert │ negativ │
───┼────────────┼─────────────┼─────────┤
 7 │ 02.03.2008 │ FirmaC\_Wert │ positiv │
───┼────────────┼─────────────┼─────────┤
 8 │ 0 │ FirmaA\_Wert │ 0 │
───┼────────────┼─────────────┼─────────┤
 9 │ 0 │ FirmaB\_Wert │ 0 │
───┼────────────┼─────────────┼─────────┤
10 │ 0 │ FirmaC\_Wert │ 0 │
───┴────────────┴─────────────┴─────────┘
Benutzte Formeln:
A2 : =INDEX(Ausgabexyz!$A:blush:A;KÜRZEN((ZEILE(A4)-1)/3;0)+1)
B2 : =INDEX(Ausgabexyz!$B$1:blush:G$1;1;REST(ZEILE(A1)-1;3)\*2+1)
C2 : =INDEX(Ausgabexyz!$B:blush:G;KÜRZEN((ZEILE(A4)-1)/3;0)+1;REST(ZEILE(A1)-1;3)\*2+1)

Tabellendarstellung erreicht mit dem Code in FAQ:2363

mir geht es ja auch darum, zu verstehen, was du gemacht hast,
damit ich’s später mal anwenden kann, da hilft mir die blosse
formel nicht viel…

Die Formel in A2 ist erweitert worden damit die gesamte Spalte abgegriffen werden kann und listet immer 3x (gemäss der Anzahl Firmen) das Datum auf. Wenn es (noch) mehr werden einfach statt durch 3 durch 4 dividieren und anstelle von A4 dann A5 als Startwert vorgeben.

Die Formel in B2 ist erweitert worden um die neuen Spalten im Suchbereich und die Multiplikation mit 2 am Ende der Funktion. Sie zählt die ungeraden Spalten hoch, wenn sie nach unten kopiert wird.

Die Formel in C3 ist dann die Kombination von beiden - der Bereich ist angepasst an die komplettten Spalten und die Argumente sind dieselben wie in den ersten zwei Formeln und müssen in derselben Weise angepasst werden, falls das notwendig sein sollte.

Ich hoffe, dass Du damit nun zurechtkommst - wenn Du Fragen hast, einfach fragen.


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Vba Spalten transponieren
Hi Christine,

Pivots vermeide ich :smile:

ich hab das heute morgen geschrieben, da kannte ich diese Beitragsfolge noch nicht und bevor’s in die Tonne wandert:

Es funktioniert getestet gemäß deiner ersten Tabellenstruktur, ungetestet müßte es auch für die neue Struktur gelten, wenn du
For Spa1 = 2 To 4
gegen
For Spa1 = 2 To 6 step 2
austauschst

Bezogen auf:

Tabellenblatt: [Mappe1]!Tabelle1
 ¦ A ¦ B ¦ C ¦ D ¦
--+----------+-----+-----+-----¦
1 ¦ Dat ¦ F-A ¦ F-B ¦ F-C ¦
--+----------+-----+-----+-----¦
2 ¦ 01.02.08 ¦ pos ¦ ¦ ¦
--+----------+-----+-----+-----¦
3 ¦ 02.03.08 ¦ ¦ neg ¦ pos ¦
--+----------+-----+-----+-----¦
4 ¦ 03.03.08 ¦ pos ¦ neg ¦ neg ¦
-------------------------------+
Zahlenformate der Zellen im gewählten Bereich:
A1:A4
haben das Zahlenformat: TT.MM.JJ
B1:B4,C1:C4,D1:smiley:4
haben das Zahlenformat: Standard

wie wärs damit:
(Alt+F11, Einfügen Modul, Code reinkopieren, ggfs anpassen, Editor schließen)

Sub Umwandeln()
Dim Zei1 As Long, Zei2 As Long, wks1 As Worksheet, wks2 As Worksheet, Spa1 As Integer
Dim Ber As Range
Set wks1 = Worksheets("Tabelle1")
Set wks2 = Worksheets("Tabelle2")
With wks2
 .UsedRange.ClearContents
 .Range("A1:C1") = Array("Datum", "F-", "Wert")
 .Columns(1).NumberFormatLocal = "TT.MM.JJ"
End With
With wks1
 Set Ber = .Range(.Cells(1, 1), .Cells(.Range("A" & .Rows.Count).End(xlUp).Row, 4))
 Zei2 = -(Zei2 = Zei2) ' warum einfach wenn's auch ... :smile:
 For Zei1 = 2 To Ber.Rows.Count
 For Spa1 = 2 To 4
 If Ber.Cells(Zei1, Spa1) "" Then
 Zei2 = Zei2 + 1
 wks2.Cells(Zei2, 1) = Ber.Cells(Zei1, 1)
 wks2.Cells(Zei2, 2) = Right(Ber.Cells(1, Spa1), 1)
 wks2.Cells(Zei2, 3) = Ber.Cells(Zei1, Spa1)
 End If
 Next Spa1
 Next Zei1
End With
End Sub

Gruß
Reinhard