Suchlauffunktionen

Hallo Willi

Spalte A im Rechenblatt 1 hat offenbar gar nichts mit der
Problemstellung zu tun, obwohl du darüber Angaben machst, oder? In
irgend einer Zelle im Rechenblatt 2 gibst du die folgende Formel ein:

VSuchlauf(Rechenblatt 1!B:B; NICHT
(IstLeer(LfdZelle));0;SetzeZelle(LfdZelle;D:D;LfdZähler))

Die macht, was du suchst: Sie sucht in Spalte B von Rechenblatt1 alle
nichtleeren Zellen und setzt den gefundenen Wert dieser Zellen in
Spalte D von Rechenblatt 2. "LfdZähler" zählt dabei die Anzahl
bereits gefundener Treffer und bewirkt damit, das jeder Treffer in
die nächste Zeile von Spalte D übertragen wird.

Natürlich könnte die Formel auch in irgend einer Zelle von
Rechenblatt 1 stehen, müsste dann aber anders lauten:

VSuchlauf(B:B; NICHT
(IstLeer(LfdZelle));0;SetzeZelle(LfdZelle;Rechenblatt
2!D:D;LfdZähler))

oder sogar ausserhalb beider Rechenblätter, und dann:

VSuchlauf(Rechenblatt 1!B:B; NICHT
(IstLeer(LfdZelle));0;SetzeZelle(LfdZelle;Rechenblatt
2!D:D;LfdZähler))

Gruss
Thomas

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

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

Suchlauffunktionen

#243 On 14 Juni, 2004 09:22 Willi Bokelmann said,

Hallo RagTime-Freunde,

habe mal wieder eine Frage zu Suchlauffunktionen.

iMac G3 - MacOS X 10.2.6 - RT 5.6.5

Im Rechenblatt 1 befinden sich im Bereich A1:A2000 Zeile für Zeile
Daten. In Spalte B befinden sich nur vereinzelt Daten (z.B. B2, B301,
B557, B1387 und B2000). Diese fünf Daten möchte ich in einem
Rechenblatt 2 im Bereich D1:D5 angezeigt haben.

Leider finde ich keine Lösung. Kann mir jemand behilflich sein?

Schönen Dank

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

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

Re: Suchlauffunktionen

#244 On 14 Juni, 2004 12:13 Listenteilnehmer said,

> Spalte A im Rechenblatt 1 hat offenbar gar nichts mit der
> Problemstellung zu tun, obwohl du darüber Angaben machst, oder? In
> irgend einer Zelle im Rechenblatt 2 gibst du die folgende Formel ein:
>
> VSuchlauf(Rechenblatt 1!B:B; NICHT
> (IstLeer(LfdZelle));0;SetzeZelle(LfdZelle;D:D;LfdZähler))
>
> Gruss
> Thomas

Hallo Thomas!

Schöne Lösung!

Habe mal daran herumgespielt und kam auf folgenden Fallstrick:

Angenommen Du suchst in der Spalte A nach einer Bedingung, die von
einem Knopf (Einblendmenü mit verschiedenen Auswahlmöglichkeiten, wie
z. B. "Kunde A, Kunde B; Kunde C, KundeD") kommt und schreibst das
Ergebnis in ein weiteres Rechenblatt.
Dann sieht die Formel ja so aus:
(Ich habe hier "Spaltenwert()" eingesetzt, da ich noch andere
Spaltenwerte in einer Auswahl brauche, lasse es aber zur Vereinfachung
hier einmal weg. Deshalb das Überbleibsel "Spaltenwert()")

VSuchlauf(Rechenblatt1!A1:A100;Spaltenwert(1)=Knopf
1!X;0;SetzeZelle(Spaltenwert(1);Rechenblatt 2!$A$1:$A$100;LfdZähler))

Das klappt auch sehr gut für den Fall, dass die gefundene Auswahl
größer als die vorherige ist!

Wenn aber die gefundene Auswahl kleiner (z. B. 20) als die vorherige
(z. B. 27) ist, dann bleiben Überbleibsel der letzten Auswahl zurück
(nämlich alle über 20 bis 27).

Beim herumfummeln habe ich folgende Möglichkeit gefunden:

VSuchlauf(Rechenblatt1!A1:A100;Spaltenwert(1)=Knopf
1!X;0;SetzeZelle(Spaltenwert(1);Rechenblatt
2!$A$1:$A$100;LfdZähler)&SetzeZelle('';''Rechenblatt
2!$A$1:$A$100;LfdZähler+1)&SetzeZelle('';''Rechenblatt
2!$A$1:$A$100;LfdZähler+2)&SetzeZelle('';''Rechenblatt
2!$A$1:$A$100;LfdZähler+3))

Diese Formel löscht die drei aufeinanderfolgenden Zellen nach der
Auswahl!

Da ich keine Lust hatte letzt noch mehr SetzeZelle-Befehle einzufügen
dachte ich über eine Formal nach.

Die Lösung "LfdZähler+(Zeile-LfdZähler)" funktioniert ja leider nicht.

ich sehe mal wieder vor lauter Bäumen keinen Wald. Die Lösung ist
bestimmt einfach und ich falle nicht drauf.

Kannst Du mir einen kleine Tipp geben.

Gruß

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

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

Suchlauffunktionen

#246 On 18 Juni, 2004 17:37 Thomas Kaegi said,

Hallo Peter

Während des Umzugs von RagTime war das Forum auf dem Web nicht
greifbar. Deshalb sehe ich deine Frage erst jetzt.

In deinem Beispiel scheint mir verwirrend, dass du Spaltenwert(1) mit
dem Knopf vergleichst und dann gleichzeitig diesen Spaltenwert ins
zweite Rechenblatt überträgst. Da steht dann ja dort einfach so oft
"Kunde A", wie "Kunde A" in der ersten Spalte des Rechenblattes 1
vorkommt. In meinem folgenden Beispiel ist die Annahme anders:

Rechenblatt 1, Spalte A: Kunden (jeder Kunde kann mehrmals vorkommen)
Rechenblatt 1, Spalte B: Die Werte, die für den mit dem Knopf
ausgewählten Kunden in Spalte A des Rechenblattes 2 übertragen werden
sollen.

Die Formel, die das bewirken soll, steht in Rechenblatt 1, Zelle C1.
Zelle C2 enthält die Anzahl übertragener Werte und ist eine Basis für
die Formel in Zelle C3, die alle Zellen in Spalte A von RB2 löscht,
die von früheren Suchläufen mit mehr Treffern übriggeblieben sind.

C1: VSuchlauf(A1:B100;LfdZelle=Knopf
1!X;0;SetzeZelle(Spaltenwert(2);Rechenblatt 2!$A$1:$A$100;LfdZähler))

C2: VSuchlauf(A1:B100;LfdZelle=Knopf 1!X)

C3: VSuchlauf(Rechenblatt
2!$A:$A;LfdIndex>C2;0;SetzeZelle("";Rechenblatt 2!$A:$A;LfdIndex))

Alternativ zu dieser Lösung kann man die 3 Formeln auch in eine
einzige Zelle zusammenfügen, indem die Formelteile 1 und 3 mit "&"
verknüpft werden. Dabei wird aber Zelle C2 trotzdem als Hilfszelle
für die Zwischenspeicherung der Anzahl übertragener Werte benützt.
Die Speicherung dieser Anzahl wird durch den zweiten
SetzeZelle-Befehl im ersten VSuchlauf bewirkt.

VSuchlauf(A1:B100;LfdZelle=Knopf
1!X;0;SetzeZelle(Spaltenwert(2);Rechenblatt
2!$A$1:$A$100;LfdZähler)&SetzeZelle(LfdZähler;C2))&VSuchlauf(Rechenblatt
2!$A:$A;LfdIndex>C2;0;SetzeZelle("";Rechenblatt
2!$A:$A;LfdIndex);IstLeer(Index(Rechenblatt 2!$A:$A;LfdIndex+1)))

Nicht ganz trivial, aber beides funktioniert.

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

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

Re: Suchlauffunktionen

#247 On 18 Juni, 2004 23:05 Listenteilnehmer said,

Am 18.06.2004 um 18:37 schrieb Thomas Kaegi:

> Hallo Peter

Hallo Thomas!

Danke für Deine Amtwort!

> Während des Umzugs von RagTime war das Forum auf dem Web nicht
> greifbar. Deshalb sehe ich deine Frage erst jetzt.

Kein Problem!

> In deinem Beispiel scheint mir verwirrend, dass du Spaltenwert(1) mit
> dem Knopf vergleichst und dann gleichzeitig diesen Spaltenwert ins
> zweite Rechenblatt überträgst. Da steht dann ja dort einfach so oft
> "Kunde A", wie "Kunde A" in der ersten Spalte des Rechenblattes 1
> vorkommt.

Genau das ist der Effekt:

In Spalte A stehen die verschiedenen Kunden buntgemischt aus einer
4D-Datenbank kommend. Sie sollen nun einzeln mit Ihren danebenliegenden
Werten in Spalte B, C und D sortiert in ein anderes Rechenblatt
überführt werden. Sortieren in dieser Spalte macht keinen Sinn, da
immer wieder neu buntgewürfelt importiert wird und man immer von einem
bestimmten Kunden die Daten einsehen will.

Daher meine Vorgehensweise mit Spaltenwert(1)!

> VSuchlauf(Rechenblatt 2!$A:$A;LfdIndex>C2;0;SetzeZelle("";Rechenblatt
> 2!$A:$A;LfdIndex))

Das war die Lösung die ich suchte!

Ich dachte mir schon, dass es einen weiteren Suchlauf geben muss,
versuchte es aber trotzdem immer wieder es mit dem ersten Suchlauf zu
realisieren. Das war mein Fehler.

Der zweite Suchlauf ist genau richtig für meine Zwecke!

> Alternativ zu dieser Lösung kann man die 3 Formeln auch in eine
> einzige Zelle zusammenfügen, indem die Formelteile 1 und 3 mit "&"
> verknüpft werden. Dabei wird aber Zelle C2 trotzdem als Hilfszelle
> für die Zwischenspeicherung der Anzahl übertragener Werte benützt.
> Die Speicherung dieser Anzahl wird durch den zweiten
> SetzeZelle-Befehl im ersten VSuchlauf bewirkt.
>
> VSuchlauf(A1:B100;LfdZelle=Knopf
> 1!X;0;SetzeZelle(Spaltenwert(2);Rechenblatt
> 2!$A$1:$A$100;LfdZähler)&SetzeZelle(LfdZähler;
> C2))&VSuchlauf(Rechenblatt
> 2!$A:$A;LfdIndex>C2;0;SetzeZelle("";Rechenblatt
> 2!$A:$A;LfdIndex);IstLeer(Index(Rechenblatt 2!$A:$A;LfdIndex+1)))

Ich will Dir dann auch mein Gesamtergebnis nicht vorenthalten:

Ein Knopf 1 mit einem Einblendmenü der verschiedenen herauszufilternden
Kunden als nichtdruckendes Objekt auf der Seite.

Rechenblatt 1:

In Spalte A sind die verschiedenen Kunden.
In Spalte B steht ein Datum.
In Spalte C eine Warenart
und in Spalte C ein Preis.

In Spalte E1 habe ich nun folgende Formel eingegeben:

VSuchlauf(A1:D100;Spaltenwert(1)=Knopf
1!X;0;SetzeZelle(Spaltenwert(1);Rechenblatt
2!$A$1:$A$100;LfdZähler)&SetzeZelle(Spaltenwert(2);Rechenblatt
2!$B$1:$B$100;LfdZähler)&SetzeZelle(Spaltenwert(3);Rechenblatt
2!$C$1:$C$100;LfdZähler)&SetzeZelle(Spaltenwert(4);Rechenblatt
2!$D$1:$D$100;LfdZähler)&SetzeZelle(LfdZähler;E2)&VSuchlauf(Rechenblatt
2!$A:$A;LfdIndex>E2;0;SetzeZelle('';Rechenblatt
2!$A:$A;LfdIndex)&SetzeZelle('';Rechenblatt
2!$B:$B;LfdIndex)&SetzeZelle('';Rechenblatt
2!$C:$C;LfdIndex)&SetzeZelle('';Rechenblatt
2!$D:$D;LfdIndex);IstLeer(Index(Rechenblatt 2!$A:$A;LfdIndex+1))))

Im Rechenblatt 2 liegt dann das jeweilige Ergebnis vor.

> Mit freundlichem Gruss
> Thomas

Herzlichen Dank Thomas - das war's. Treffer!

Wußte doch das ich mal wieder quer gedacht habe und nicht den einfachen
Weg gegangen bin. Danke für das Augen öffnen.

Gruß aus Drupa-City in die Schweiz

Peter

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

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