SVERWEIS(Lookup) mit Ausgabe mehrerer Resultate

Hallo,

ich habe eine Tabelle mit mehreren Registern.
Register 1: Auflistung von Dienstleistungen und deren Zuordnung an meine Kunden
Register 2: Erstellung der Rechnung für den Kunden

Meine Herausforderung:
Meine Rechnung an den Kunden 1 enthält mehrere Zeilen von Dienstleistungen aus dem Register 1.
Kann mir da jemand helfen, wie ich dies hinkriege? Ich dachte an Lookup - kriege aber immer nur den ersten Eintrag…

Vielen Dank
Herzliche Grüsse

Nur ein Hinweis: Das, was Du da anscheinend machen willst, ist eine typische Datenbankaufgabe. Gibt es einen Grund, dass Du dafür eine Tabellenkalkulation nutzt?

1 Like

Hallo Robert

Danke für diesen Hinweis.
Ich bin mit LibreOffice Base nicht vertraut. Wenn ich mein Vorhaben in Calc lösen kann, wäre ich sicher wohler.
Aber wenn es sein muss lerne ich auch Datenbank Applikationen nutzen…
Gruss

Datenbanken: Kein Problem - ich habe Zeit und kann dabei helfen. Versuche einen Einstieg und schreibe mich hier per Mail an. Dann sehen wir weiter.

1 Like

In Calc kann man mit Spezialfiltern arbeiten. Der eigentlich Trick liegt darin, daß das Filterergebnis in eine andere Tabelle geschrieben werden kann.
.
Ich nutze das z.B. indem ich mir zuerst einen Datenbankauszug in eine Tabelle lege und dann die benötigten Eintrage (bei mir anhand einer Kundennummer) in eine “aktueller Filterergebnis”-Tabelle ziehe. Dies ist dann meine Ausgangslage um Sonderabrechnungen gemäß individuellem Vertrag zu erstellen.
.
Fur Rechnungen habe ich das Verfahren nie genutzt, da dabei eher simple standardisierte Berechnungen verwendet werden, die Datenbanken gut erzeugen.
.
Erstmal zu klären ist, woher Datenbank oder Calc-Filter wissen, welche Datensätze in die Rechnung sollen. Spätestens, wenn die in Rechnung gestellten Gegenstände dann auch “im Lager als verkauft markiert” oder a la Baumarkt “verkauft=ausgegeben” nachbestellt werden sollen lohnt sich die Datenbank als zentraler Verwaltungspunkt. Vorher hilft Sie bei der Integrität der Daten.

Heutzutage versteht so gut wie niemand wie LOOKUP (VERWEIS) funktioniert obwohl (oder weil) die gleiche Funktion schon in der ersten Version von Visicalc im Jahr 1979 vorhanden war. Tabellenkalkulationen haben mit Datenbanken nichts zu tun und sollten auch nicht als solche verwendet werden.
[V/H]LOOKUP sowie MATCH (dt: [S/H]VERWEIS sowie VERGLEICH) sind ursprünglich gerade nicht zum Nachschlagen eines Datensatzes gemacht.
SVERWEIS, HVERWEIS und VERGLEICH können dafür missbraucht werden, indem man das letzte Argument explizit auf 0 setzt. VERWEIS funktioniert niemals so sondern immer wie in den 80iger Jahren.

Punkte Note
0 Ungenügend
3 Mangelhaft
8 Ausreichend
13 Befriedigend
17 Gut
22 Sehr gut

=VERWEIS(5 ; A1:B6) → “Mangelhaft” weil 5 >= 3 aber <8
=VERWEIS(5 ; A1:A6 ; B1:B6) → “Mangelhaft” weil 5 >= 3 aber <8 (Variante mit getrennten Vektoren)
=SVERWEIS(5 ; A1:B6 ; 2) → “Mangelhaft” weil 5 >= 3 aber <8
=INDEX(B1:B6 ; VERGLEICH(5 ; A1:A6)) → “Mangelhaft” weil 5 >= 3 aber <8
Dieser Modus erwartet, dass der Nachschlagevektor A1:A6 eine aufsteigend sortierte Skala ist. Nur wenn der Suchwert kleiner als der kleinste Skalenwert ist wird #NA! zurückgegeben.


Dagegen der “Datenbankmodus”:
=SVERWEIS(5 ; A1:B6 ; 2 ; 0) → #NA! weil 5 nicht in A1:A6
=INDEX(B1:B6 ; VERGLEICH(5 ; A1:A6 ; 0)) #NA! weil 5 nicht in A1:A6
Hier wird immer nur der erste Datensatz zurückgegeben, wo der Nachschlagevektor A1:A6 exakt dem Suchwert gleicht, egal ob sortiert oder auch nicht.

1 Like

Zum einen könntest Du vielleicht mit einer Pivottabelle arbeiten, aber da ist eine Automatisierung sehr begrenzt.

Ohne Pivot geht es aber auch: Du erstellst eine einmalige Referenz, mit der Du dann in der Rechnungen-Tabelle suchen kannst. Sverweis mag ich nicht, weil er nicht flexibel ist, daher habe ich meine Lösung mit der Index-Formel erstellt. Hier der Fahrplan:

  1. Tabelle “Dienstleistungen” enthält neben Deinen Spalten auch noch eine Suchspalte, die die Einträge pro Kunde hochzählt und den Kunden (besser: eine Kundennummer) hinzufügt.
  2. Tabelle “Rechnungen” verwendet die Index-Formel, um für den selektierten Kunden die Daten zu kopieren.
    Nachteil dieser Lösung: Der Gesamtbetrag muss oben stehen, Du musst sicherstellen, dass die Formeln so weit nach unten kopiert werden, dass auch immer alle Rechnungsposten erfasst werden, und die Fehlermeldungen musst Du ausblenden.

Ein Beispiel lege ich bei; hier noch das Textformat:

  • Blatt “Dienstleistungen”: Spalte E ist die Suchspalte, die den Kunden und sein n-tes Auftreten zusammenführt. Formel für E2: =D2&ZÄHLENWENN($D$2:$D2;D2)
  • Blatt “Rechnungen”:
    B1 enthält den Kunden (besser: die Kundennummer),
    Ab A4 gehen die Formeln los; diese kopieren die Struktur aus dem Blatt “Dienstleistungen” (Formel so weit nach rechts kopieren, wie es nötig ist). In A4 steht:
    =INDEX($Dienstleistungen.A:A;VERGLEICH($B$1&ZEILE(A1);$Dienstleistungen.$E:$E;0))

Der Teil “$D4&ZEILE(A1)” ist etwas empfindlich, falls Du die Tabellenstruktur änderst, prüfe also, ob danach noch alles richtig funktioniert.

Edit: Formel für A4 korrigiert.
mehrere_resultate.ods (11.0 KB)