PDA

Vollständige Version anzeigen : Kreuztabelle mit Text und mehreren Ergebnissen


blubbmoep
20.05.2013, 09:26
Hallo,

leider sind meine Excel-Kenntnisse nicht gerade überragend (was sich so spontan auch wohl nicht ändern lässt ;) ) und ich verzweifel gerade an meiner Aufgabe. Vielleicht kann mir jemand helfen? Im Gegenzug gibt es ewige Dankbarkeit...

Das Problem ist Folgendes: Ich habe eine Liste von 170 unterschiedlichen Titeln (Spalte A) in einer Tabelle mit insgesamt 3 Spalten. Die zugehörigen Werte in den Spalten B und C wiederholen sich regelmäßig, wobei es mehrfach dieselbe Kombination von B und C gibt:

A.........B...................C
Titel1..Eigenschaft1..2010
Titel2..Eigenschaft2..2009
Titel3..Eigenschaft3..2008
Titel4..Eigenschaft1..2010
...

Nun möchte ich mir das alles aber nicht als Liste darstellen lassen, sondern in einer Kreuztabelle, die so aussehen soll:

..........Eigenschaft1...Eigenschaft2...Eigenschaft3
2010....Titel1
...........Titel2
2009..........................Titel2
2008..................................................Titel3
...

D.h. die vorherige Liste soll nach Eigenschaft und Jahr aufgeschlüsselt werden. Die Titel sind allerdings alle in Textform, sodass ich hier offenbar nicht mit einer Pivot-Tabelle arbeiten kann. Diese konnte ich zwar behelfsmäßig in Access erstellen, doch nützt es mir nicht viel, da ich hier
1. keinen der Titel markieren (farblich hervorheben) kann und
2. keine automatische Aktualisierung der Kreuztabelle auf Basis der zugrundeliegenden Excel-Tabelle möglich ist (... oder ich weiß nur nicht, wie das geht :rolleyes: )

In Excel könnte ich das Problem, wie ich herausgefunden habe, wohl mit Verweisen lösen, aber das funktioniert auch nicht so, wie ich es möchte - soll heißen, es müssten ja pro Kombination 'Eigenschaft/Jahr' mehrere Werte ('Titel') ausgegeben werden und das direkt in aufeinanderfolgenden Zeilen. Das bekomme ich aber nicht hin. Das Einzige, das hier geklappt hat, war, dieselbe Formel für alle Zeilen aus der ursprünglichen Tabelle in das neue Datenblatt in aufeinanderfolgende Zeilen hineinzukopieren, sodass immer Leerzeilen zwischen den Titel entstehen, die ich nicht löschen kann. So soll es aber nicht aussehen, sondern eben so wie in der Pivot-Tabelle, die ich in Access erstellt habe - wo die Titel direkt aufeinander folgen, ohne Leerzeilen dazwischen.

Kann mir jemand helfen? Das wäre wirklich toll :)

GMG-CC
20.05.2013, 11:06
Hallo n.n.

vielleicht reicht ja auch die Darstellung ...

ebs17
20.05.2013, 11:37
Wenn Du die Kreuztabellenabfrage in Access beherrschst: Das gleiche Jet-SQL kannst Du auch in Excel ausführen.
Siehe auch
ADO und Excel (http://www.online-excel.de/excel/singsel_vba.php?f=135)
VBA - MATRIX-Formel über VBA -> zu langsam (http://www.ms-office-forum.net/forum/showthread.php?t=267916#13)

blubbmoep
20.05.2013, 12:25
Zunächst mal vielen Dank für die schnellen Antworten!

@GMG-CC/Günther
Danke für die Mühe! Vorläufig werde ich es wohl so machen, doch ist das Problem, dass ich die Tabelle für eine wissenschaftliche Arbeit brauche und am Ende in möglichst übersichtlicher Form mit einreichen muss. Nicht, dass es so unübersichtlich wäre ;) doch wäre eine Kreuztabelle natürlich 'schicker'.

@ebs17/Eberhard
Auf den ersten Blick geht das weit über meine Kenntnisse hinaus, um ehrlich zu sein :eek: die Abfrage in Access habe ich über die doch recht simple Schaltfläche gemacht und dafür keinen Code gebraucht.
Ich werde mir aber natürlich die Seiten, die du verlinkt hast, durchlesen.

Eines aber noch dazu: Auch in Excel habe ich es mit einer Pivot-Tabelle versucht, aber da werden als Werte ja immer nur Zahlen angezeigt und ich bräuchte hier Text.


Edit:
Noch eine ergänzende Frage: Ich wäre ja schon happy, wenn es möglich wäre, bei der Pivot-Darstellung in Excel die einzelnen 'Blöcke' (also z.B. wenn ich zunächst nach Eigenschaft und dann nach Jahr sortiere) nebeneinander statt untereinander abzubilden - ist das möglich?

Gruß,
Alice

ebs17
20.05.2013, 12:55
und dafür keinen Code gebraucht
Du kannst doch aber das Ergebnis betrachten und weiterverwenden, dass der Abfrageassistent erzeugt.

Erich G.
20.05.2013, 18:20
Hi,
das könntest du auch mal ausprobieren.
Läuft es schnell genug? (würde mich interessieren, habe die Geschwindigkeit nicht getestet...)
Option Explicit

Sub Umorg_Kreuztab()
Dim zz As Long, arQ, oDicEig As Object, nn As Long, oDicKom As Object
Dim oDicJ As Object, arKyEig, arKy, arIt, strK As String, arrE() As String
Const strT As String = "|#|"

zz = Cells(Rows.Count, 1).End(xlUp).Row
arQ = Cells(2, 1).Resize(zz - 1, 3) ' Quelldaten

Set oDicEig = CreateObject("Scripting.Dictionary")
For zz = 1 To UBound(arQ)
If Not oDicEig.Exists(arQ(zz, 2)) Then
nn = nn + 1
oDicEig(arQ(zz, 2)) = nn ' Liste und Pos. der Eigenschaften
End If
Next zz
arKyEig = oDicEig.Keys

Set oDicKom = CreateObject("Scripting.Dictionary")
For zz = 1 To UBound(arQ)
strK = arQ(zz, 3) & strT & arQ(zz, 2)
oDicKom(strK) = oDicKom(strK) + 1 ' Liste und Anz. der Kombinationen
Next zz
arKy = oDicKom.Keys
arIt = oDicKom.Items

Set oDicJ = CreateObject("Scripting.Dictionary")
For zz = 0 To oDicKom.Count - 1
strK = Split(arKy(zz), strT)(0) ' max. Anz/Jahr
If oDicJ(strK) < arIt(zz) Then oDicJ(strK) = arIt(zz)
Next zz
arKy = oDicJ.Keys
arIt = oDicJ.Items
oDicJ(arKy(0)) = 1
For zz = 1 To oDicJ.Count - 1 ' Jahres-Beginnzeilen
oDicJ(arKy(zz)) = oDicJ(arKy(zz - 1)) + arIt(zz - 1)
Next zz
' arrE = Ergebnisarray
ReDim arrE(0 To oDicJ(arKy(zz - 1)) + arIt(zz - 1), 0 To oDicEig.Count)
For zz = 0 To oDicJ.Count - 1
arrE(oDicJ(arKy(zz)), 0) = arKy(zz) ' Ausgabe Zeile 1: Eigenschaften
Next zz
For zz = 1 To oDicEig.Count
arrE(0, zz) = arKyEig(zz - 1) ' Ausgabe Spalte 1: Jahre
Next zz
oDicKom.RemoveAll
For zz = 1 To UBound(arQ) ' Verteilung der Titel
strK = arQ(zz, 3) & strT & arQ(zz, 2)
arrE(oDicJ(CStr(arQ(zz, 3))) + oDicKom(strK), oDicEig(arQ(zz, 2))) = arQ(zz, 1)
oDicKom(strK) = oDicKom(strK) + 1
Next zz
' VVVVVVVVVVV <<--- Ausgabe beginnt bei dieser Zelle(kann auf and. Blatt sein)
Cells(3, 6).Resize(UBound(arrE) + 1, UBound(arrE, 2) + 1) = arrE ' Ausgabe
End Sub

blubbmoep
24.06.2013, 14:54
Entschuldige, Erich G. - nachdem ich eine halbwegs funktionierende Lösung gefunden hatte, habe ich leider gar nicht mehr hier reingesehen :eek: vielen Dank für deine Mühe!

Meine Excel-Fähigkeiten sind allerdings wirklich nicht der Wahnsinn, sodass ich gar nicht recht weiß, was ich mit dem Code machen soll. Kannst du mir einen Tip geben, in welche Richtung ich mich informieren sollte, damit ich das umsetzen kann?

@ebs17
Das ist schon richtig :) aber der Assistent verlangt ja nun wirklich keine umfangreichen Excel-Kenntnisse, sodass ich ohne eigenen Code ausgekommen bin.

Erich G.
24.06.2013, 18:36
Hi,
das hier könnte ein Anfang sein - wobei du nur einen der ersten Abschnitte brauchst:
"Wie fügt man ein Makro oder eine benutzerdefinierte Funktion in ein Modul ein?"
http://www.online-excel.de/excel/singsel_vba.php?f=44

Nebenbei: Meine Eltern nannten mich Erich. "Erich G." ist nur eine UserID. :grins: