Übungsbeispiele Suchlauffunktionen

Von Jürgen Schell. | 15 Januar, 2010 - 16:37
Kurzbeschreibung:

Unter den Rechenblattfunktionen in RagTime gehören die Suchlauffunktionen (Suchlauf, VSuchlauf, HSuchlauf) zu denen, die am meisten Schwierigkeiten im Umgang bereiten. Zugleich sind die Funktionen aber ungewöhnlich nützlich für Anwender, die Tabellen mit Auswertungen erstellen oder aber Formulare mit einer komplexen Funktionalität.

Ausführliche Beschreibung:

Die Grund-Idee

Beim manuellen Auswerten langer Tabellen hat wohl jeder schon einmal folgenden Fall erlebt: Mit einem Lineal fährt man die Zeilen einer Tabelle ab, prüft für jede Zeile, ob sie ein bestimmtes Kriterium erfüllt und führt eine Strichliste um diese Zeilen zu zählen. Oder aber, man tippt Beträge aus diesen Zeilen in einen Taschenrechner ein, um beispielsweise alle Umsätze zu einem bestimmten Produkt zu ermitteln.

Die Suchlauffunktionen führen eine sehr ähnliche Aktion aus: Sie durchlaufen einen Bereich ein einem Rechenblatt Schritt für Schritt. Bei jedem Schritt führen sie eine Überprüfung aus. Immer, wenn die Überprüfung "wahr" liefert, führen sie eine Berechnung aus und merken sich das Resultat als Zwischenergebnis. Wurde der ganze Bereich durchlaufen, liefern sie das letzte Zwischenergebnis ab. Dafür haben Suchlauffunktionen eine Reihe von Argumenten: Den Bereich, den sie durchlaufen sollen, die Bedingung, die geprüft werden soll, mit welchem Wert das Zwischenergebnis anfangen soll und wie es bei Treffern geändert wird.

RagTime hat drei Suchlauffunktionen: Suchlauf, VSuchlauf und HSuchlauf. Die erste durchläuft einen Bereich zellenweise. Der Bereich kann eine Spalte, eine Zeile oder ein beliebiger rechteckiger Bereich der Tabelle sein. Für jede Zelle des Bereichs wird die Überprüfung durchgeführt. VSuchlauf dagegen durchläuft senkrecht einen Bereich von einer oder mehreren Spalten und betrachtet in jedem Schritt eine Zeile dieses Bereichs – also auch mehrere nebeneinander stehende Zellen gleichzeitig. HSuchlauf arbeitet analog in die andere Richtung: In einem horizontalen Bereich wird Schritt für Schritt jede Spalte betrachtet.

Hilfsfunktionen

In den Suchlauffunktionen stehen spezielle Hilfsfunktionen zur Verfügung, die nur im Zusammenhang mit einem Suchlauf sinnvoll sind:

  • LfdIndex: Die Nummer der Zelle in Suchlauf/ Zeile in VSuchlauf / Spalte in HSuchlauf, die gerade bearbeitet wird.
  • LfdZähler: Die Anzahl der Treffer, die bisher gefunden wurden
  • LfdResultat: Das aktuelle Zwischenergebnis
  • LfdZelle: Der Wert der Zelle, die Suchlauf gerade bearbeitet
  • Spaltenwert(n) (Nur in VSuchlauf): Der Wert der n-ten Spalte in der gerade bearbeiteten Zeile
  • Zeilenwert(n) (Nur in HSuchlauf): Der Wert der n-ten Zeile in der gerade bearbeiteten Spalte

Beispiele

Das angehängte RagTime-Dokument geht eine Reihe typischer Anwendungen von Suchlauffunktionen durch. Die Konstruktionen werden von Seite zu Seite komplexer / abstrakter. Die Kurve ist dabei durchaus steil: Ziel war eine sehr knappe Übersicht, in die man immer mal wieder hinein schauen kann.
Diese Einstiegsbeispiele verzichten auf den Fall geschachtelter Suchlauffunktionen.

Ablauf-Skizze

Beim Nachvollziehen der einzelnen Schritte einer Suchlauffunktion mag die folgende Skizze helfen, die die Schritte nachzeichnet, die Suchlauf ausführt. Die Skizze für VSuchlauf und HSuchlauf wäre analog, nur dass die Spaltenwert- / Zeilenwert- Werte noch gesetzt werden.

Großes Bild (bis 800 * 800):
Übungsbeispiele Suchlauffunktionen
Anhang Größe
Suchlauf_Beispiele_1.rtd 522.89 KB

Suchlauffunktionen

#9179 On 17 Januar, 2010 09:34 Andreas Loos said,

Lieber Jürgen,
vielen Dank für die Beispiele zu den Suchläufen, in die ich mich im Laufe der Zeit einigermaßen eingearbeitet habe.
Jetzt aber noch eine Bitte: Welchen Sinn machen geschachtelte Suchläufe und wie verwendet man sie? Ich habe sie noch nie gebraucht, vielleicht nur deshalb, weil ich nicht weiß, in welchen Situationen sie Vorteile bringen.
Also sozusagen ein Kapitel 2 wäre großartig.

Mit bestem Gruß
Andreas Loos

Weitere Suchlauf-Anleitungen

#9592 On 28 Juni, 2010 13:13 Jürgen Schell said,

Für Leute, die in diesen kleinen Artikel stolpern:

Ende März 2010 hab ich angefangen, einen ausführlicheren (und wohl recht technischen) Einstieg in die Suchlauffunktionen zu schreiben, meist am Beispiel von VSuchlauf. Immer, wenn ich etwas Zeit und Lust hab, schreibe ich ein wenig mehr dazu.

(Der Abschnitt zu »Bedingtem Mittelwert« bring mir die meisten Google-Treffer, aber wohl meist von Excel-Benutzern. Ich fürchte, meine RagTime-Lösung bringt denen nicht viel ;-)

Das ganze steht auf meinem eigenen Web-Site:

http://www.j-schell.de/node/9

Gruß, Jürgen

Suchlauf und Excel

#9601 On 30 Juni, 2010 07:39 jacques villars said,

Hallo Jürgen,

Gibt es in Excel etwas ähnliches wie die Suchlauffunktionen und wenn ja wie heissen sie dort ? Seit ich RagTime kenne habe ich gar nicht mehr mit Excel gearbeitet, aber man hat mir darüber gefragt.
jacques

Beispieldokument "Verschachtelte Suchläufe"

#9184 On 17 Januar, 2010 16:07 Thomas Kaegi said,

Hallo Andreas

Schon vor längerer Zeit habe ich dieses Beispieldokument mit verschachtelten Suchläufen in den Expertenseiten abgelegt:

http://experts.ragtime.de/experts/node/2362

Im Dokument ist die Formel mit dem verschachtelten Suchlauf sehr detailliert erläutert.

Grundätzlich ist eine einleuchtend sinnvolle Anwendung:
Eine Tabelle vertikal absuchen/bearbeiten (mit VSuchlauf) und in der gefundenen/jeder Zeile mit einem HSuchlauf die Daten in der Zeile bearbeiten. Einfaches Beispiel: Anzahl Einträge in der Zeile ermitteln.

Konkret: Ich bin für eine Laufveranstaltung verantwortlich, die jedes Jahr durchgeführt wird. Ich habe eine Tabelle (Rechenblatt 1) mit allen Teilnehmern (einfachheitshalber sei hier angenommen, dass in Spalte A eine eindeutige Identifikation der Teilnehmenden stehe). In den Spalten B und folgenden sind die Ergebnisse je eines Jahres eingetragen (der Einfacheit halber nehme ich hier an, es sei pro Jahr lediglich eine einzige Spalte verwendet, in welcher der Rang eingetragen sei). Nun möchte ich nach neun Jahren in Rechenblatt 2 eine Liste der Teilnehmer erstellen, welche potenzielle Jubilare sind, d.h. die in allen bisherigen 9 Läufen klassiert waren. Folgende Formel in Zelle B1 in Rechenblatt 2 erzeugt die gewünschte Liste in Spalte A:

VSuchlauf(Rechenblatt 1!$A:$A;Und(LfdZelle≠'';HSuchlauf(Rechenblatt 1!$B$1:$J$1;Index(Rechenblatt 1!$B:$J;LfdIndex(1);LfdIndex))=9);0;SetzeZelle(LfdZelle;A:A;LfdZähler))

Der innere Suchlauf kommt in der Bedingung des äusseren Suchlaufs vor:
Erste Bedingung: Spalte A ist nicht leer, enthält also einen Teilnehmer.
Zweite Bedingung: Der HSuchlauf läuft über die 9 Spalten B:J. Mit der Index-Funktion werden die einzelnen Zellen geprüft. Für die Indizierung sind der LfdIndex des äusseren Suchlaufs (Zeile) und des inneren Suchlaufs (Spalte) massgebend. Der HSuchlauf zählt die Zellen, welche einen Wert>0 enthalten, was nur dann der Fall ist, wenn der Teilnehmer klassiert war. Wenn das Resultat des Suchlaufs den Wert 9 ergibt, handelt es sich um einen potenziellen Jubilaren.
Sind beide Bedingungen erfüllt, wird die Identifikation des Teilnehmers in die Tabelle in Rechenblatt 2 übertragen. Natürlich fehlt da noch der Aspekt des Löschens der Tabelle vor einer erneuten Berechnung. Aber um das geht es hier nicht.

Thomas