Liste erstellen nach Kriterien

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

ulliwitt
Beiträge: 5
Registriert: Do, 30.04.2009 02:27

Liste erstellen nach Kriterien

Beitrag von ulliwitt »

Hallo,
ich habe zwar schon gesucht, aber leider noch nicht das richtige für mich gefunden.

Mein Problem: Ich möchte aus einer Tabelle heraus mehrere gefilterte Listen erstellen.
Ich stelle mir das so vor: Ich habe eine Tabelle mit vielen Namen (Spalte A). Daneben sind mehrere Spalten mit unterschiedlichen Kriterien, sagen wir "Apfel", "Birne", "Banane" und "Kiwi" (Spalten B-E). In diesen Spalten ist angeben, wer Birnen, Äpfel usw. hat, z.B. durch ein "x" gekennzeichnet.
Ich würde nun gerne in einer anderen Tabelle in verschiedenen Spalten durch ein Gültigkeitsfeld, das die verschiedenen Obstsorten als Kriterium zur Auswahl anbietet, automatisch eine gefilterte Liste von Namen auswerfen, die dem oben genannten Kriterium entsprechen, ohne dass ich den Filter dafür jedesmal aufrufen muss.
Wenn ich die Kriterien verändere, sollte die alte Liste überschrieben werden. Also wenn ich in Tabelle2 in Spalte A "Apfel" durch "Birne" (s.u.) ersetze, dürfen nur die drei Namen für "Birne" aufgelistet werden und die untersten vom vorigen Kriterium "Apfel" (Name8+9) müssten gelöscht sein.

Also:
TABELLE1.......................................................TABELLE2
.............Apfel..Birne..Banane..Kiwi ........................Apfel......Kiwi.......Birne
Name1 _____x____________________......................_Name1___Name2___Name3
Name2 _____x_________________x__......................_Name2___Name4___Name5
Name3 _____x_____x______________......................_Name7___Name6___Name7
Name4 _______________________x__......................_Name8___Name9_________
Name5 ___________x______________......................_Name9__________________
Name6 _________________x_____x__
Name7 _____x_____x______________
Name8 _____x____________________
Name9 _____x___________x_____x__
usw.

Wie kann ich das bewerkstelligen? Lässt sich das machen? Gibt es eine Funktion, eine Formel, ein Makro dafür?
Mir geht es dabei um eine einfache Erstellung dieser Listen.
Danke schon mal im Voraus.

Ulli
Gert Seler
*******
Beiträge: 1763
Registriert: Di, 03.10.2006 18:05

Re: Liste erstellen nach Kriterien

Beitrag von Gert Seler »

Hallo ulliwit,
die einfachste Lösung sieht meinerseits so aus :
erste Tabelle umbennen in "Daten" und zweite Tabelle in "Berechnung".
In "Berechnung" Zelle B1 "Apfel" in C1 "Birne" in D1 "Banane" usw .
Titel in "Daten" Spalte "A"=Nr. ;Spalte "B"=Namen; Zelle "C1" markieren und = eingeben; mit Maus "Reiter" von"Berechnung" anklicken, Zelle"B1" markieren
und "ENTER" betätigen. In "Daten_C1" sollte nun die Formel :

Code: Alles auswählen

=Berechnung.B1
stehen. Die Formel nach rechts kopieren und die "Spalten_Buchstaben" entsprechend anpassen.
Die Titelzeile in "Daten" passt sich den geänderten Einträgen in "Berechnung" an.
Formel in der Tabelle "Berechnung" Zelle "B2" :

Code: Alles auswählen

=WENN(UND($Daten.$C$1=$B$1;$Daten.$C2="x");$Daten.$B2;"")
und nach unten kopieren.
Bitte die vollen und gemischten Bezüge beachten ( $ ), sonst werden die Werte nicht gefunden (siehe Ooo_Hilfe ).In Zelle "C2"
wird die angepaßte Formel so erscheinen :

Code: Alles auswählen

=WENN(UND($Daten.$D$1=$C$1;$Daten.$D2="x");$Daten.$B2;"")
Formel anpassen und kopieren.

Ich hoffe das hilft Dir weiter.

mfg
Gert
Es gibt nichts gutes, außer man tut es.
Win7_64 / LO_4.4.5.2
ulliwitt
Beiträge: 5
Registriert: Do, 30.04.2009 02:27

Re: Liste erstellen nach Kriterien

Beitrag von ulliwitt »

Gert,

vielen Dank für deine Antwort und deine Mühe.
Lieder entspricht es meinen Vorstellungen nicht.
Folgende Gründe:
1. in der "Daten"-Tabelle habe ich 5 Obstsorten, in der Liste will ich aber immer nur jeweils 3 Sorten abfragen. Wenn ich die Spaltentitel in der Datentabelle von der Berechnungstabelle abhängig mache, stimmen die Daten sehr schnell nicht mehr: wenn ich in der Berechnungstabelle Apfel und Birne als Spaltentitel austausche, dann stehen die "x" an der falschen Stelle, d.h. anstatt der Apfelbesitzer werden dann eigentlich die Besitzer der Birnen aufgelistet. Die Datentabelle muss unabhängig bleiben.
2. die Auflistung weist Lücken auf und ist nichts anderes als ein Spiegelbild der Kreuze in der Datentabelle. Dann könnte ich auch gleich die Namen in der Datentabelle eingeben, oder versuchen mit SVERWEIS zu arbeiten. Ich möchte allerdings kompakte Listen erstellen (ohne leere Zellen dazwischen), die ich ggf. erneuern kann, indem ich eine andere Obstsorte als Kriterium eingebe.

Wenn ich mit dem Standardfilter arbeite, kann er mir eine kompakte (weil gefilterte) Auflistung in einen anderen Bereich hinein erstellen, wobei ich noch nicht verstanden habe, wie ich die Auflistung auf die Namensspalte begrenzen kann. Im Moment wird immer nur die gesamte Tabelle mit allen Obstsorten gefiltert ausgegeben. Wenn das auf die eine Spalte (Namen) reduziert werden könnte, wär das schon mal toll.
Ich vermute, dass ich hier mit einem Makro arbeiten müsste, das bei neuen Bedingungen, sprich: neuem Kriterium (z.B. Kiwi inder 1. Spalte) neu ausgeführt wird. Aber geht das?

Grüße, Ulli
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Re: Liste erstellen nach Kriterien

Beitrag von Charly »

Hallo Ulliwitt!

Ich habe mal versucht auf die Schnelle eine Makrolösung zu schreiben.
Ich habe zwei Tabellen Daten und Ausgabe.

Ich kann in der 1. Zeile des Tabellenblattes "Ausgabe" die zu selektierenden Obstsorten (bis zu vier) eingeben und dann auf den Button "Aktualisieren" drücken.

Gruß
Charly
Dateianhänge
AusgabeFilter.ods
(10.18 KiB) 43-mal heruntergeladen
ulliwitt
Beiträge: 5
Registriert: Do, 30.04.2009 02:27

Re: Liste erstellen nach Kriterien

Beitrag von ulliwitt »

Charly, Danke!

Dein Ansatz scheint mir sehr vielversprechend. Leider ist aber scheinbar das Makro selbst nicht vollständig, bzw. nicht mit der eingestellten Tabellendatei abgespeichert. Kann das sein?

Bei mir funktioniert jedenfalls das Aktualisieren nicht. Und bei den Makros ist zwar ein Makro "Main" zu finden, allerdings ohne jegliche Funktionen.

Herzliche Grüße,
Ulli
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Re: Liste erstellen nach Kriterien

Beitrag von Charly »

Hallo Ulliwitt!

Ich habe jetzt selbst auf einem anderen Computer meine Datei heruntergeladen. Sie funktioniert bei mir einwandfrei. Allerdings musste ich die Datei erst an einem anderen Ort abspeichern, da sie beim herunterladen schreibgeschützt war. Der Button "Aktualisieren" war im Entwurfmodus (warum weiß ich nicht). Den musste ich erst umschalten. Dann funktionierte alles.

Das Makro mit dem Namen "Auswahlliste" ist vollständig vorhanden. Ein Makro Namens "Main" ist nicht vorhanden.

Hast du schon deine Makrosicherheitseinstellung überprüft, ob bei dir Makros überhaupt laufen können? (Menü-Extra-Optionen-OpenOfficeOrg-Sicherheit)

Ansonsten weiß ich die Ursache nicht.

Gruß
Charly
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Re: Liste erstellen nach Kriterien

Beitrag von Charly »

Hallo!

Ich kopiere dir mal zur Sicherheit noch den Code ohne Datei hier herein.

Code: Alles auswählen

Sub Auswahlliste()

Dok = ThisComponent
Quelle = Dok.sheets.getByName("Daten")
Ziel = Dok.Sheets.getByName("Ausgabe")

'Löschen Altdaten
Cursor = Ziel.createCursor()
Cursor.gotoEndofusedArea(0)
Endzeile = cursor.RangeAddress.endrow
Endspalte = cursor.RangeAddress.endColumn

If Endzeile > 0 then
Bereich = Ziel.getCellRangeByPosition(0,1,Endspalte,Endzeile)
Bereich.clearContents(255)
End if

Cursor = Quelle.createCursor()
Cursor.gotoEndofusedArea(0)
Endzeile = cursor.RangeAddress.endrow
Endspalte = cursor.RangeAddress.endColumn

For I = 0 to 4
Filter = Ziel.getCellByPosition(I,0).string

If Filter = "" then
exit For
end if
Kenn = 0
For Sp = 1 to Endspalte
SpName = Quelle.getCellByPosition(Sp,0).string
If  SpName = Filter then
Kenn = 1
exit For
end if
next
If Kenn < 1 then
MSGBOX("Spalte für Filter nicht gefunden")
end if
Zeile = 1

For I1 = 1 to Endzeile
Such = Quelle.getCellByPosition(Sp,I1).string
If Such = "x" or Such = "X" then
Ziel.getCellByPosition(I,Zeile).string = Quelle.getCellByPosition(0,I1).string
Zeile = Zeile+1
end if
next


next

End Sub
Gruß
Charly
ulliwitt
Beiträge: 5
Registriert: Do, 30.04.2009 02:27

Re: Liste erstellen nach Kriterien

Beitrag von ulliwitt »

Grandios. Vielen Dank, Charly.
(Ich hatte tatsächlich die Sicherheitseinstellung nicht geändert.)

Das Makro tut genau das, was ich mir vorgestellt habe.
Was muss ich am Makro ändern, wenn die Namen in der Datentabelle in der 2. Spalte stehen und die Obstsorten in der 4. Zeile?

Gruß,
Ulli
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Re: Liste erstellen nach Kriterien

Beitrag von Charly »

Hallo Ulliwitt!
ulliwitt hat geschrieben: Was muss ich am Makro ändern, wenn die Namen in der Datentabelle in der 2. Spalte stehen und die Obstsorten in der 4. Zeile?
Das Auslesen der Namen in der Datentabelle erfolgt mit dem folgendem Befehl nach dem Istgleich-Zeichen:

Code: Alles auswählen

Ziel.getCellByPosition(I,Zeile).string = Quelle.getCellByPosition(0,I1).string
Die Null steht hier für Spalte A. Gib hier eine 1 ein und das Programm liest den Namen aus Spalte B.
also gib ein:

Code: Alles auswählen

Ziel.getCellByPosition(I,Zeile).string = Quelle.getCellByPosition(1,I1).string
Die auszulesende Zeile steht in der Variablen I1. Der Anfangswert der Variablen wird durch folgenden Befehl bestimmt:

Code: Alles auswählen

For I1 = 1 to Endzeile
Die 1 steht dabe für die Zeile 2. Soll also das Auslesen erst ab Zeile 4 beginnen, musst du hier eine 3; also: I1 =3; schreiben. Also immer 1 weniger als die tatsächlich Zeile, da Starbasic ab Null zu zählen beginnt.
also gib ein:

Code: Alles auswählen

For I1 = 3 to Endzeile
Gruß
Charly
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Re: Liste erstellen nach Kriterien

Beitrag von Charly »

Hallo Ulliwitt!

Jetzt habe ich doch noch eine Änderung übersehen. Mit Zeile 4 meintest du doch die Überschrift, ich habe das mit dem Beginn der der Datenfelder verwechselt.
Du musst daher nocher noch folgende Zeile ändern:

Code: Alles auswählen

For Sp = 1 to Endspalte
SpName = Quelle.getCellByPosition(Sp,0).string
Hier sucht das Programm welche Spalte er durchsuchen, soll. Wenn die Namen also in Spalte B, und die Überschrift mit den Obstsorten ab Spalte C und Zeile 4 beginnt musst du schreiben:

Code: Alles auswählen

For Sp = 2 to Endspalte
SpName = Quelle.getCellByPosition(Sp,3).string
Die Daten beginnen also erst eine Zeile später. also muss hier stehen:

Code: Alles auswählen

For I1 = 4 to Endzeile
Wenn man Änderung nicht testet, ist es immer schwierig an alle Punkte zu denken. Ich hoffe ich habe sie jetzt alle.

Gruß
Charly
ulliwitt
Beiträge: 5
Registriert: Do, 30.04.2009 02:27

Re: Liste erstellen nach Kriterien

Beitrag von ulliwitt »

Super!! Klappt hervorragend! Danke!

Ulli
Antworten