Re: Suchlauf oder Auswertung oderŠ?

Hallo Anselm,

Mal angenommen Du möchtest die Liste der Gesuchten in Spalte Z deines
Rechenblatt 1 stehen haben. Dann setze folgende Suchlauffunktion in eine
beliebige Zelle, in der sie nicht stört (z.B. Y1).

Hier die Formel:
VSuchlauf(A1:Q375;Oder(Spaltenwert(15)=23;Spaltenwert(16)=23;Spaltenwert(17)=23);0;SetzeZelle(Spaltenwert(1)&&Spaltenwert(2)&','&Spaltenwert(3);Z1:Z375;LfdZähler))

Kurze Erläuterung:
VSuchlauf, weil du deine Liste zeilenweise von oben nach unten durchgehst.
Das zweite Argument
{...;Oder(Spaltenwert(15)=23;Spaltenwert(16)=23;Spaltenwert(17)=23);...}
ist das von dir vorgegebene Suchkriterium. Spaltenwert(15) entspricht
hier der Spalte O, also der 15. Spalte im Suchbereich. Spalte 16 = P, etc.
Das vierte Argument - SetzeZelle(...) - erstellt dann die gewünschte
Liste. Jedesmal, wenn das Suchkriterium erfüllt ist (WAHR liefert), wird
aus der gerade geprüften Zeile ein Text aus den Werten der Spalten A, B
und C erstellt (der 1., 2. und 3. Spalte im Suchbereich). Wenn Du hier
andere Spalten brauchst mußt Du die entsprechenden Spaltenwerte dafür
einsetzen oder mit & ergänzen.
Das Z1:Z375 ist der Bereich, in den die Ergebnisliste geschrieben wird.
Dabei sorgt das LfdZähler dafür, dass dazwischen keine Leerzeilen entstehen.

Die von Dir verwndete Form der Funktion Suchlauf liefert nur die Anzahl
von Treffern, die die Bedingung (also in O, P oder Q = 23) eine 23
enthalten ist.

Wenn Du weitere Erläuterungen brauchst, melde dich.
Viele Grüße
Klaus Steigemann
Hamburger Str. 106
22949 Ammersbek
k.steigemann (at) gmx.net

Anselm Stuckenberg schrieb:

> Liebe Leute,
>
> ich habe eine Tabelle mit 375 Zeilen und einer Reihe von Spalten:
> A.Vorname, B:Nachname, C: Straße D: Š P: ein Datum, O: eine Nummer
> zwischen 13 und 36, P: eine Nummer zwischen 13 und 36, Q: eine Nummer
> zwischen 13 und 36
>
> Meine Frage nun:
>
> Ich brauche eine Liste der Adressen, die in Spalte O eine 23 haben
> oder die in Spalte P oder Q eine 23 haben und habe im Moment keine
> Ahnung, wie die Syntax der entsprechenden Formel dazu lauten müsste.
>
> Mit Suchlauf(Rechenblatt 1 O1:Q375;LfdZelle="23") erhalte ich bloß
> eine Zahl, die angibt, wie ift die "23" vorkommt, aber leider bekomme
> ich nicht hin, wie ich dann bei Treffern die Adresse ausgeworfen bekomme.
>
> Freundliche bitte um Hilfe und freundlicher Gruß
>
> Anselm

_________________________________________________
Die macnews.de Mailingliste Ragtime:
http://lists.macnews.de/cgi-bin//listinfo/ragtime

Neu: Das Mailinglistenarchiv unter
http://forum.macnews.de/lists

Re: Suchlauf oder Auswertung oderŠ?

#3751 On 15 September, 2005 00:34 Klaus Steigemann said,

Hallo Anselm,

Zu deiner Frage 2:

wie Du vielleicht bemerkt hast, ist das mit der Löschfunktion leider
nicht ganz so einfach, wie es Thomas angegeben hat. In dieser Form
arbeiten die beiden Suchläufe gegeneinander und nicht miteinander. Der
Löschsuchlauf soll immer dann, wenn in der Zielspalte A etwas steht,
dieses löschen. Damit wird zwar der alte Bestand zunächst entfernt,
sobald jedoch der zweite Suchlauf dort wieder was einträgt, will das der
erste Suchlauf schon wieder löschen. Ein ewiger Kreislauf. Der läßt sich
zwar abstellen, wenn man in der Rechenblattinformation - Tafel Allgemein
den Haken für " Nur auf Verlangen neuberechnen" setzt. Dann muß aber mit
dem Befehl Extras -> Rechnen -> "Diese Komponente rechnen" die
Ausführung der Formel(n) jedesmal manuell angestoßen werden.

Meine Lösung dazu wäre diese:
Zunächst benötigen wir in einer weiteren freien Zelle einen
Hilfssuchlauf. Z.B. in Y2 steht dann:

VSuchlauf(A1:Q375;Oder(Spaltenwert(15)=Y3;Spaltenwert(16)=Y3;Spaltenwert(17)=Y3))

Tipp: In Y3 steht die jeweils gesuchte Zahl (in deinem Beispiel die 23).
So braucht man nicht jedesmal die Formel bearbeiten, wenn man eine
andere Zahl suchen lassen will. Man schreibt sie einfach in Y3 und
bestätigt mit Enter.

Dieser Suchlauf ermittelt uns vorab die Länge (Anzahl Zeilen) der neuen
Liste.

Durch die Verkettung zweier VSuchläufe kann nun der Löschvorgang mit der
Listenerstellung kombiniert werden.
Hier die Formel dazu (zur besseren Übersicht in mehrere Zeilen
aufgeteilt; ist eigentlich nur eine):
VSuchlauf(A1:Q375;Oder(Spaltenwert(15)=Y3;Spaltenwert(16)=Y3;Spaltenwert(17)=Y3);0;
SetzeZelle(Spaltenwert(1);Zielspalte A;LfdZähler)&
SetzeZelle(Spaltenwert(2);Zielspalte B;LfdZähler)&
SetzeZelle(Spaltenwert(3);Zielspalte C;LfdZähler))
& VSuchlauf(Zielspalte A; NICHT (IstLeer(LfdZelle));0;
Wenn(LfdZähler>Y2;SetzeZelle('';Zielspalte A;LfdZähler)&
SetzeZelle('';Zielspalte B;LfdZähler)&SetzeZelle('';Zielspalte
C;LfdZähler);''))

Der erste Suchlauf ist wie von Thomas bereits angegeben (hier zeile 1
bis 4). Für Zielspalte A, B oder C mußt Du halt - wie Thomas beschrieben
hat - den gewünschten Bereich in deinem Zielrechenblatt mit der Maus
überfahren bzw. den Spalten- oder Zeilenkopf anklicken.

Der zweite VSuchlauf steuert den Löschvorgang für alle Zeilen, die über
die neue Liste hinausragen.
Dazu wird die Zielspalte A überprüft (setzt voraus, dass alle Personen
einen Vornamen eingetragen haben. Andernfalls eine Zielspalte verwenden,
die maximale Einträge hat.). Damit die Suche nicht unnötig viele Zeilen
durchsucht, wird die Suche auf die "Nichtleeren" beschränkt.
Die Wenn-Funktion, die mit & an den ersten VSuchlauf angehängt wird,
prüft ob die letzte Zeile der neuen Liste bereits erreicht ist und noch
weitere Zeilen mit alten Einträgen vorhanden sind. Wenn ja, werden diese
mit '' überschrieben (sprich gelöscht). Dazu wird der Eintrag vom
Hilfssuchlauf in Y2 mit dem LfdZähler verglichen. Mehr LfdZähler setzt
die Löschung in Gang, andernfalls passiert nix.

In meinen Tests hat alles soweit einwandfrei funktioniert. Sollte also
auch bei dir - in angepasster Form - klaglos laufen.
Man braucht nur noch die gesuchte Zahl in Y3 eintragen, alles andere
läuft von selbst.

Viele Grüße
Klaus Steigemann
Hamburger Str. 106
22949 Ammersbek
k.steigemann (at) gmx.net

Thomas Kaegi schrieb:

> Hallo Anselm
>
> Zu deiner Frage 1:
>
> Ersetze den Teil der von Klaus angegebenen Formel mit dem Setze
> Zelle-Befehl durch mehrere derartige Befehle, die mit & verknüpft sind:
>
> SetzeZelle(Spaltenwert(1);Zielspalte A;LfdZähler) &
> SetzeZelle(Spaltenwert(2);Zielspalte B;LfdZähler) &
> SetzeZelle(Spaltenwert(3);Zielspalte C;LfdZähler)
>
> Die "Zielspalte X" ist eine Spalte irgend eines Rechenblattes - die
> richtige Referenz zur jeweiligen Zielspalte setzest du einfach durch
> Anklicken des betreffenden Spaltenkopfes in deine Formel ein.
>
> Zu deiner Frage 2:
>
> Setze vor den von Klaus angegebenen VSuchlaufbefehl einen zweiten, der
> die Zieltabelle löscht, bevor sie neu berechnet wird. Die beiden
> VSuchlaufbefehle kannst du ebenfalls mit & verknüpfen.
>
> So ein Löschbefehl kann für die in obiger Formel adressierten 3
> Spalten so aussehen:
> VSuchlauf(Zielspalte A,
> Nicht(IstLeer(LfdZelle));0;SetzeZelle('';Zielspalte
> A;LfdIndex)&SetzeZelle('';Zielspalte
> B;LfdIndex)&SetzeZelle('';Zielspalte C;LfdIndex))
>
> Mit freundlichem Gruss
> Thomas
> www.ragtime-consult.ch

_________________________________________________
Die macnews.de Mailingliste Ragtime:
http://lists.macnews.de/cgi-bin//listinfo/ragtime

Neu: Das Mailinglistenarchiv unter
http://forum.macnews.de/lists

Re: Suchlauf oder Auswertung oderŠ?

#3754 On 16 September, 2005 00:10 Klaus Steigemann said,

Hallo Thomas,
bevor ich meine Mail schrieb, habe ich die Suchläufe getestet. Dabei
mußte ich bei deiner Lösung feststellen, dass nach dem Ändern der
Suchzahl nicht nur einmal die alte Liste löscht, sondern auch
immerwieder die neue Liste gelöscht und von neuem eingetragen wird. Die
Liste ist nur noch am flimmern und das Eichhörnchen in der
Werkzeugleiste ist fleißig am knabbern. Erst wenn ich die Suchzahl auf
einen Wert ändere, der nicht vorkommt, ist Ruhe und die Liste natürlich
leer.
Stellt sich jetzt die Frage, was bei dir anders ist als bei meinem
Versuch. Hast Du noch eine Abbruchbedingung eingebaut, die hier nicht
erwähnt wurde?

Weil das bei mir so ist, habe ich die gestern angebotene Lösung gebaut.
Die läuft tatsächlich nur einmal durch.

Ich testete übrigens auf Mac OS 9.2.2 mit RagTime 5.6.2

Wenn Du möchtest, schicke ich dir gerne das Testdokument mal zu. Würde
mich interessieren, ob es sich bei dir anders verhält.

RT3-Dokumente unter Windows öffnen schrieb:

> Hallo Anselm, hallo Klaus
>
> Der vorangestellte "Lösch-Suchlauf" löscht nicht einfach die Tabelle,
> nachdem der Befehl ausgeführt wurde, wie Klaus schreibt. Es ergibt
> sich kein automatischer "Kreislauf" - wenigstens bei mir nicht. Ich
> verwende diese Konstruktion in diversen Dokumenten.
>
> Aber natürlich ist es so, dass Änderungen im Suchbereich die Formel
> erneut auslösen. Das erachte ich aber eigentlich als erwünscht.

Da gebe ich dir natürlich recht. Das muß auch so sein. Andernfalls
müsste man sonst Formeln mit Referenzen immer manuell anstoßen.

>
> Wenn die Formel trotzdem nur auf Wunsch ausgelöst werden soll, dann
> empfehle ich, die Formel mit einem Knopf auszulösen. Entweder wird die
> Formel direkt in einen Knopf eingebaut wird, was aber nicht sehr
> praktisch ist, da das Formelfenster des Knopfes nicht gerade
> editierfreundlich ist. Oder mit dem Knopf wird in irgend eine Zelle
> (ich nenne sie Steuerzelle) eine 1 geschrieben wird und die Formel
> dann einerseits mit einem "SpezialWenn(Steuerzelle=1;...)" verriegelt
> wird und anderseits in der Formel selbst mit einem zusätzlichen
> SetzeZelle diese Steuerzelle wieder auf 0 zurückgesetzt wird.

Diese Methode nutze ich gerne im Formulardesign, vorallem dann, wenn
dadurch gleich mehrere Formeln gesteuert werden sollen.

>
> Gruss
> Thomas

Gruß
Klaus Steigemann
Hamburger Str. 106
22949 Ammersbek
k.steigemann (at) gmx.net

_________________________________________________
Die macnews.de Mailingliste Ragtime:
http://lists.macnews.de/cgi-bin//listinfo/ragtime

Neu: Das Mailinglistenarchiv unter
http://forum.macnews.de/lists