Suchlauf

Hallo,

In einer Rechenblattkomponente habe ich in der Spalte B in jeder
Zeile unterschiedliche Namen stehen. Die Namen kommen in
verschiedenen Zeilen mehrfach vor. Nun soll RT diese Spalte B
durchsuchen, die Zeilen vergleichen und die vorhandenen Namen jeweils
nur einmal in eine weitere Rechenblattkomponente in Spalte A
schreiben. Lässt sich das mit RT realisieren und wenn ja, wie?

MacOS 10.4.9, RT 6.0.2 (build 1625)

Freundliche Grüße

Matthias Liebler

Re: Suchlauf

#6284 On 28 April, 2007 22:12 Tom Kaegi said,

Hallo Matthias

> In einer Rechenblattkomponente habe ich in der Spalte B in jeder
> Zeile unterschiedliche Namen stehen. Die Namen kommen in
> verschiedenen Zeilen mehrfach vor. Nun soll RT diese Spalte B
> durchsuchen, die Zeilen vergleichen und die vorhandenen Namen
> jeweils nur einmal in eine weitere Rechenblattkomponente in Spalte
> A schreiben. Lässt sich das mit RT realisieren und wenn ja, wie?

Auf die Schnelle habe ich folgende Formel gefunden, die macht was du
suchst:

VSuchlauf(B:B;VSuchlauf(C:C;LfdZelle=LfdZelle(1))=0;0;SetzeZelle
(LfdZelle;C:C;VSuchlauf(C:C; NICHT (IstLeer(LfdZelle)))+1))

Aber ich habe nicht lange überlegt, ob es sich nicht auch einfacher
machen liesse. Das ist also durchaus möglich.

Die Formel steht im gleichen Rechenblatt wie deine Namentabelle. Die
"gefilterten" Namen kommen in Spalte C des gleichen Rechenblattes zu
stehen.

Der erste (äussere) Suchlauf sucht in Spalte B eine Zeile nach der
anderen ab. Mit dem ersten inneren Suchlauf wird ermittelt, ob der
durch den äusseren Suchlauf in Spalte B gerade angeschaute Name in
Spalte C bereits vorkommt (LfdZelle=LfdZelle(1)). Wenn nicht (also
das Ergebnis dieser Zählung gleich 0 ist), dann wird der SetzeZelle-
Befehl ausgeführt, welcher den vom äusseren Suchlauf in Spalte B
gerade angeschaute Namen (also LfdZelle) in Spalte C einsetzt und
zwar auf der ersten leeren Zeile. Diese wird durch den zweiten
inneren Suchlauf ermittelt, indem die Anzahl Zeilen gezählt werden,
die nicht leer sind und zu diesem Wert noch 1 addiert wird.

Ich hoffe, du kommst damit zurecht.

Mit freundlichem Gruss
Thomas

Re: Suchlauf

#6285 On 28 April, 2007 23:04 Lutz-Dieter Bornemann said,

Am 28.04.2007 um 19:27 schrieb Matthias Liebler:

> Hallo,
>
> In einer Rechenblattkomponente habe ich in der Spalte B in jeder
> Zeile unterschiedliche Namen stehen. Die Namen kommen in
> verschiedenen Zeilen mehrfach vor. Nun soll RT diese Spalte B
> durchsuchen, die Zeilen vergleichen und die vorhandenen Namen
> jeweils nur einmal in eine weitere Rechenblattkomponente in Spalte
> A schreiben. Lässt sich das mit RT realisieren und wenn ja, wie?
>
> MacOS 10.4.9, RT 6.0.2 (build 1625)
>
Guten Tag Matthias,

in meiner Lösung stehen die Namen in Spalte A,
die Formel steht in B1
und die verkürzte Liste erscheint in Spalte C
(jeweils desselben Rechenblatts)
VSuchlauf(A:A;LfdZelle<>'' UND NICHT Finden
(LfdZelle;LfdResultat);'';LfdResultat&LfdZelle&SetzeZelle
(LfdZelle;C:C;LfdZähler))

Gruß
Lutz-D. Bornemann

Re: Suchlauf

#6286 On 28 April, 2007 23:14 Matthias Liebler said,

Am 28.04.2007 um 23:12 schrieb Tom Kaegi:

> Hallo Matthias
>
> VSuchlauf(B:B;VSuchlauf(C:C;LfdZelle=LfdZelle(1))=0;0;SetzeZelle
> (LfdZelle;C:C;VSuchlauf(C:C; NICHT (IstLeer(LfdZelle)))+1))
>
> Aber ich habe nicht lange überlegt, ob es sich nicht auch einfacher
> machen liesse. Das ist also durchaus möglich.
>
> Die Formel steht im gleichen Rechenblatt wie deine Namentabelle.
> Die "gefilterten" Namen kommen in Spalte C des gleichen
> Rechenblattes zu stehen.
>
> Der erste (äussere) Suchlauf sucht in Spalte B eine Zeile nach der
> anderen ab. Mit dem ersten inneren Suchlauf wird ermittelt, ob der
> durch den äusseren Suchlauf in Spalte B gerade angeschaute Name in
> Spalte C bereits vorkommt (LfdZelle=LfdZelle(1)). Wenn nicht (also
> das Ergebnis dieser Zählung gleich 0 ist), dann wird der SetzeZelle-
> Befehl ausgeführt, welcher den vom äusseren Suchlauf in Spalte B
> gerade angeschaute Namen (also LfdZelle) in Spalte C einsetzt und
> zwar auf der ersten leeren Zeile. Diese wird durch den zweiten
> inneren Suchlauf ermittelt, indem die Anzahl Zeilen gezählt werden,
> die nicht leer sind und zu diesem Wert noch 1 addiert wird.
>
> Ich hoffe, du kommst damit zurecht.

Hallo Thomas,

danke, das funktioniert.

Ein Problem gibt es aber noch: Ersetze ich einen vorhandenen Namen
durch einen anderen, der bisher in Spalte B noch nicht vorkam oder
lösche ich gleiche Namen aus Spalte B, so wird die Spalte C nicht
automatisch erneuert. Funktioniert auch nicht mit dem Befehl "diese
Komponente rechnen". Ich könnte jetzt zwar einen Knopf einbauen,
hinter dem ein Script bzw. der Befehl liegt, möchte ich aber nicht,
weil die Rechenblattkomponente "im Hintergrund läuft" und ich nur
einzelne Zellinhalte in verschiedene andere Komponenten (Layouts,
Rechenblätter) übernehme.

Freundliche Grüße

Matthias Liebler

Re: Suchlauf

#6287 On 28 April, 2007 23:17 Matthias Liebler said,

Am 29.04.2007 um 00:14 schrieb Matthias Liebler:

>
>
> Ein Problem gibt es aber noch: Ersetze ich einen vorhandenen Namen
> durch einen anderen, der bisher in Spalte B noch nicht vorkam oder
> lösche ich gleiche Namen aus Spalte B, so wird die Spalte C nicht
> automatisch erneuert.

Halt! Stimmt so nicht. Ersetze ich einen vorhandenen Namen durch
einen anderen, so bleibt der bisherige Name in Spalte C stehen und
der neue Name wird hinten angehängt.

Freundliche Grüße

Matthias Liebler

Re: Suchlauf

#6288 On 29 April, 2007 17:46 Matthias Liebler said,

Am 29.04.2007 um 18:29 schrieb Tom Kaegi:

> Kritisch ist, dass der Prozess im Hintergrund ablaufen soll und
> nicht mit einem Knopf ausgelöst werden kann.

Hallo Thomas,

danke für Deine umfangreiche Hilfe.

Da in meinem Dokument (32 Layouts, 59 Rechenblätter...) an den
unterschiedlichen Stellen Suchläufe von mir eingebaut wurden und
überall das gleiche oder ähnliche Problem der Nicht-Neuberechnung bei
Änderungen besteht, habe ich in einem Layout lauter einzelne Knöpfe
mit dahinter liegenden Befehlen und Scripten eingebaut. So kann ich
an einer zentralen Stelle - wenn auch nur manuell - die Neuberechnung
anstossen und auch sicher sein, dass alles aktuell ist. Das erschien
mir die praktikabelste Lösung.

Freundliche Grüße

Matthias Liebler

Re: Suchlauf

#6289 On 29 April, 2007 18:53 Lutz-Dieter Bornemann said,

Am 29.04.2007 um 18:29 schrieb Tom Kaegi:

> Hallo Lutz-Dieter
>
>> in meiner Lösung stehen die Namen in Spalte A,
>> die Formel steht in B1
>> und die verkürzte Liste erscheint in Spalte C
>> (jeweils desselben Rechenblatts)
>> VSuchlauf(A:A;LfdZelle<>'' UND NICHT Finden
>> (LfdZelle;LfdResultat);'';LfdResultat&LfdZelle&SetzeZelle
>> (LfdZelle;C:C;LfdZähler))
>
> Deine Lösung verblüfft - aber leider hat auch sie ihre Mängel!
> Steht z.B. in der Liste in Spalte A der Name "Zimmermann" und steht
> weiter unten ein Eintrag, der nur "Mann" heisst, so erscheint
> dieser nicht in Spalte C.

Guten Tag Thomas,

Du hast Recht.
Ich bessere nach:

VSuchlauf(A:A;LfdZelle<>'' UND NICHT Finden(Zeichen(13)
&LfdZelle;LfdResultat);'';LfdResultat&Zeichen(13)&LfdZelle&SetzeZelle
(LfdZelle;C:C;LfdZähler))

Entschließt man sich zu einer Schleifenkonstruktion,
kann man bei Veränderungen in Spalte A
die Liste in Spalte C automatisch komplett neu schreiben lassen.

Interessiert?

Gruß
Lutz-D. Bornemann

Re: Suchlauf

#6290 On 29 April, 2007 19:21 Tom Kaegi said,

Hallo Lutz-Dieter

> VSuchlauf(A:A;LfdZelle<>'' UND NICHT Finden(Zeichen(13)
> &LfdZelle;LfdResultat);'';LfdResultat&Zeichen(13)
> &LfdZelle&SetzeZelle(LfdZelle;C:C;LfdZähler))

Da musst du leider noch mehr nachbessern: Ein Beispiel mit zwei in
der Schweiz oft vorkommenden Namen: Steht zuerst ein "Niggli" in der
Liste, so wird in der Folge ein "Nigg" nicht mehr in die filtrierte
Liste übernommen. Analog gibt's in Deutschland die Namen "Hammermann"
und "Hammer". Ich zweifle deshalb, ob deine auf den ersten Blick so
elegante Lösung mit dem "virtuellen String" überhaupt machbar ist.
Aber vielleicht findest du einen Weg.

Mit freundlichem Gruss
Thomas

Re: Suchlauf

#6291 On 29 April, 2007 20:00 Lutz-Dieter Bornemann said,

Am 29.04.2007 um 20:21 schrieb Tom Kaegi:

> Hallo Lutz-Dieter
>
>> VSuchlauf(A:A;LfdZelle<>'' UND NICHT Finden(Zeichen(13)
>> &LfdZelle;LfdResultat);'';LfdResultat&Zeichen(13)
>> &LfdZelle&SetzeZelle(LfdZelle;C:C;LfdZähler))
>
> Da musst du leider noch mehr nachbessern: Ein Beispiel mit zwei in
> der Schweiz oft vorkommenden Namen: Steht zuerst ein "Niggli" in
> der Liste, so wird in der Folge ein "Nigg" nicht mehr in die
> filtrierte Liste übernommen. Analog gibt's in Deutschland die Namen
> "Hammermann" und "Hammer". Ich zweifle deshalb, ob deine auf den
> ersten Blick so elegante Lösung mit dem "virtuellen String"
> überhaupt machbar ist. Aber vielleicht findest du einen Weg.

Hallo Thomas,

kurz nach dem Abschicken meiner Antwort ist mir auch aufgefallen,
dass das, was "vorne" gilt, natürlich auch "hinten" sein muss.

Also (entsprechend):
VSuchlauf(A:A;LfdZelle<>'' UND NICHT Finden(Zeichen(13)
&LfdZelle&Zeichen(13);LfdResultat);'';LfdResultat&Zeichen(13)
&LfdZelle&Zeichen(13)&SetzeZelle(LfdZelle;C:C;LfdZähler))

Gruß
Lutz-D. Bornemann

Re: Suchlauf

#6292 On 29 April, 2007 21:23 Tom Kaegi said,

Hallo Lutz-Dieter

> kurz nach dem Abschicken meiner Antwort ist mir auch aufgefallen,
> dass das, was "vorne" gilt, natürlich auch "hinten" sein muss.
>
> Also (entsprechend):
> VSuchlauf(A:A;LfdZelle<>'' UND NICHT Finden(Zeichen(13)
> &LfdZelle&Zeichen(13);LfdResultat);'';LfdResultat&Zeichen(13)
> &LfdZelle&Zeichen(13)&SetzeZelle(LfdZelle;C:C;LfdZähler))

Ein grosses BRAVO!

Mit herzlichem Gruss
Thomas

Re: Suchlauf

#6293 On 29 April, 2007 22:56 Lutz-Dieter Bornemann said,

Am 29.04.2007 um 22:23 schrieb Tom Kaegi:

> Hallo Lutz-Dieter
>
>> kurz nach dem Abschicken meiner Antwort ist mir auch aufgefallen,
>> dass das, was "vorne" gilt, natürlich auch "hinten" sein muss.
>>
>> Also (entsprechend):
>> VSuchlauf(A:A;LfdZelle<>'' UND NICHT Finden(Zeichen(13)
>> &LfdZelle&Zeichen(13);LfdResultat);'';LfdResultat&Zeichen(13)
>> &LfdZelle&Zeichen(13)&SetzeZelle(LfdZelle;C:C;LfdZähler))
>
> Ein grosses BRAVO!
>
> Mit herzlichem Gruss
> Thomas

Danke
Lutz

Suchlauf

#6295 On 30 April, 2007 13:28 Thomas Kaegi said,

Für all jene, die diesen Thread im Web-Forum ansehen und sich über
den neuartigen Operator in meinen Formeln wundern:

Das merkwürdige Zeichen (sieht aus wie ein kleines Quadrat mit
"Ohren" an den Ecken) steht für das Ungleich-Zeichen (schräg
durchgestrichenes "="). Stattdessen kann man auch wie Lutz "<>"
schreiben.

Gruss
Thomas
--