Mal wieder vsuchlauf

Hallo Tom, hallo liebe Liste,

gerade sitze ich in einer Sitzung und muss um 14:00 Uhr die Loesung
haben, habe jetzt aber leider anderes im Kopf, dabei ist das Problem
trivial: In einer Liste steht in Spalte A eine Anzahl, in Spalte B
die Bezeichnung, in Spalte C der entsprechende Betrag, in Spalte D
eine Bemerkung.

Aufgabe: Aus dieser sehr langen Liste muss ich zwei neue Listen
generieren, einmal mit allen Zeilen, in denen in Spalte "D" eine
bestimmte Bemerkung steht, einmal mit allen Zeilen, in denen in
Spalte "D" entweder gar nichts oder eine andere Bemerkung steht.

Das Ganze bitte bitte bitte wenn moeglich als Formel, die ich einfach
nur noch reinkopieren muss ...

Herzlichen Dank und Gruss

Gottwalt

Re: Mal wieder vsuchlauf

#6294 On 30 April, 2007 12:22 Tom Kaegi said,

Hallo Gottwalt

> gerade sitze ich in einer Sitzung und muss um 14:00 Uhr die Loesung
> haben, habe jetzt aber leider anderes im Kopf, dabei ist das
> Problem trivial: In einer Liste steht in Spalte A eine Anzahl, in
> Spalte B die Bezeichnung, in Spalte C der entsprechende Betrag, in
> Spalte D eine Bemerkung.
>
> Aufgabe: Aus dieser sehr langen Liste muss ich zwei neue Listen
> generieren, einmal mit allen Zeilen, in denen in Spalte "D" eine
> bestimmte Bemerkung steht, einmal mit allen Zeilen, in denen in
> Spalte "D" entweder gar nichts oder eine andere Bemerkung steht.

Ausgangslage: Im Rechenblatt "R Basisliste" sind die Spalten so
belegt wie du angegeben hast.
Es gibt ein Rechenblatt "R Bemerkung" und ein weiteres "R Rest". Alle
drei sind spaltenmässig gleich formatiert und haben eine Titelzeile,
die im Suchlauf und beim Erstellen der neuen Tabellen übersprungen
werden muss.

Die folgende Formel befindet sich in Zelle E1 der Tabelle "R
Bemerkung" - sie ist zur Erklärung in Zeilen umgebrochen:

VSuchlauf(R Basisliste!$A:$A;Und(LfdIndex>1;
Index(R Basisliste!$D:$D;LfdIndex))='gesuchte Bemerkung');0;
SetzeZelle(LfdZelle;A:A;LfdZähler+1)&
SetzeZelle(Index(R Basisliste!$B:$B;LfdIndex);B:B;LfdZähler+1)&
SetzeZelle(Index(R Basisliste!$C:$C;LfdIndex);C:C;LfdZähler+1)&
SetzeZelle(Index(R Basisliste!$D:$D;LfdIndex);D:D;LfdZähler+1))

Zeilen 1 und 2: Der Suchlauf (es könnte auch die Funktion "Suchlauf"
verwendet werden, aber ich finde VSuchlauf einleuchtender) läuft über
Spalte A der Basisliste. Zwei Bedingungen müssen erfüllt sein:
Erstens darf es sich nicht um die Kopfzeile handeln (diese Bedingung
ist zwar eigentlich überflüssig, da in der Kopfzeile sicher nicht die
gesuchte Bemerkung steht, aber zur Sicherheit ...) und zweitens muss
in Spalte D die gesuchte Bemerkung stehen. Statt mit der
Indexfunktion könnte auch mit dem Suchbereich A:D (in diesem Fall
zwingend "VSuchlauf") und "Spaltenwert(4)" gearbeitet werden. Aber
ich ziehe die Indexfunktion vor. Grund: Plötzlich wird in der Tabelle
noch eine Spalte vor Spalte D eingefügt, z.B. für Rabattstufen, und
dann ist die Formel im Eimer, weil der Spaltenindex in der Formel
dabei nicht automatisch angepasst wird. Mit der Index-Funktion wird
die Formel dagegen automatisch richtig angepasst.

Zeile 3: der aktuelle Wert aus Spalte A der Basisliste wird in Spalte
A des Rechenblatts in die Zeile eingesetzt, die der Anzahl bereits
gefundener Treffer+1 (wegen der Titelzeile) entspricht.

Die Zeilen 5-7 behandeln in gleicher Weise die Werte in den Spalten B
bis D, auch hier (aus dem gleichen Grund) unter Benützung der
Indexfunktion.

NB: die Formel berücksichtigt nicht, dass in der Ausgangstabelle
Änderungen gemacht werden könnten, die eine vorgängige Löschung der
Zieltabelle erforderlich machen würde.

Die Formel in Zelle E1 von "R Rest" weicht von obiger Formel nur
dadurch ab, dass in der Bedingung statt des Gleichheitszeichens das
Ungleichzeichen benützt werden muss.

Mit freundlichem Gruss
Thomas