Seite 1 von 1

wie arbeitet die VERGLEICH (Funktion) ??

Verfasst: Di, 24.09.2013 19:20
von Amdur Eledhwen
Hallo an alle OO-Begabten!

Ich entschuldige mich gleich für die extensive Größe des Beitrags (!), doch folgende Fragen treiben mich derzeit um:
1) Wie arbeitet die Vergleichs-Funktion? wie durchsucht sie die Matrix? (Calc-Hilfe klärt unzureichend auf)
2) Warum werden manche Zeilenindizes nicht nachvollziehbar ausgegeben?
3) Weshalb führt sie meistens zum #NV-Fehler wenn der Typ "0" ist (=exakte Übereinstimmung, in meinem Fall immer gegeben weil der Suchbegriff aus der Tabelle selbst stammt!)
4) Weshalb funktioniert sie tabellenintern (mit Typ 0) mithilfe der INDIREKT-Funktion, und bei externen Bezügen nicht?


Beschreibung:

Ich möchte ein Stichwort-Suche in Zellen ermöglichen, dergestalt, dass ich ein paar Buchstaben eingebe und mir eine Liste an Wörtern/Zellen wiedergegeben wird, wo dieser Suchbegriff in irgendeiner Art vorkommt.
Das ist im Grunde gut gelungen, nur gibt es ungünstige Phänomene — nämlich dass bei manchen Suchbegriffen bis zur maximalen Anzahl von Übereinstimmungen ein Zellwert wiederholt ausgegeben wird und die nachfolgenden eben nicht. Das Problem an der Sache ist in einer Zelle der Zeile angesiedelt, die die Funktion

Code: Alles auswählen

VERGLEICH([Ergebnis1];[Matrix in anderer Tabelle])
enthält. Und eben jener möchte ich auf den Grund gehen! Sie dient mir dazu, den Zeilenbezug einer Zelle auszugeben, deren Ergebnis bereits in der Liste enthalten ist (Zelle mit [Ergebnis1] als Inhalt), um in der nächsten Zelle diesen Zeilenbezug als oberste grenze der Suchmatrix zu definieren, um den Wert eben nicht wiederholt auszugeben, sondern den nächsten usw.
Die Zeilenbezüge, die streckenweise ausgegeben werden, sind jedoch nicht korrekt (?), und der Fehler ist auch nicht zu eruieren. Das führt dann dazu, dass immer und immer wieder in der gleichen Matrix gesucht wird und immer wieder das gleich ausgegeben…
Komischerweise gibt die Funktion meistens den "#NV"-Fehler aus, wenn ich den Typ in VERGLEICH(B9;Verbs.A$4:A$10000;0) auf "0" setze, was eine exakte Übereinstimmung fordert (die in meiner Liste nur einmal möglich sein sollte). Wenn Ich es innerhalb einer Tabelle suchen lasse (ohne andere Tabelle im Bezug), funktioniert es auch nicht, bis ich den Zellbezug indirekt darstelle: (dann funuzt es)

Code: Alles auswählen

VERGLEICH(INDIREKT("A234");A$4:A$10000;0)
Dies funktioniert jedoch nicht von einer anderen Tabelle aus! Ich bin überfragt und weiß nicht, wie verstehen. —> #NV
Der Suchbegriff ind er Vergleichs-Funktion ist eines der Ergebnisse (in einer anderen Tabelle) aus meiner Stichwortsuche. Die Ergebnisse basieren auf einer Auswahl an regulären Ausdrücken, je nachdem, was gefunden werden soll — dass es daran liegen könnte, glaube ich nicht, weil der Fehler auch dann auftritt, wenn ich die Zellinhalte eingebe und nach dem gleichen Zitat suchen lasse ohne Bezüge.

Also ich kann außer dem Screenshot natürlich auch eine Beispieldatei hochladen, allerdings ist sie voll mit Devanagari-Zeichen und ich weiß nicht, ob der Rechner sie korrekt darstellen wird. Auch ist die Tabelle noch etwas unübersichtlich und ohne Struktur mit Querbeet-Bezügen.
bei der Suche nach "lo" werden 22 Übereinstimmungen gefunden, doppelt vorkommende Hindi-Verben werden orange dargestellt — das Verb "to load" tritt repititiv auf, die restlichen Verben werden nicht ausgegeben. Dies liegt an dem Zeilenindex, der von der Vergleich-Funktion falsch ermittelt wird. In ihr ist der Typ weggelassen, weil sonst zu 97% #NV das Ergebnis wäre…
bei der Suche nach "lo" werden 22 Übereinstimmungen gefunden, doppelt vorkommende Hindi-Verben werden orange dargestellt — das Verb "to load" tritt repititiv auf, die restlichen Verben werden nicht ausgegeben. Dies liegt an dem Zeilenindex, der von der Vergleich-Funktion falsch ermittelt wird. In ihr ist der Typ weggelassen, weil sonst zu 97% #NV das Ergebnis wäre…
Bildschirmfoto 2013-09-24 um 18.57.19.png (76.96 KiB) 4837 mal betrachtet
die Suche nach "love" ergibt 3 Ergebnisse, alle jedoch dieselben, wobei es natürlich 3 verschiedene sein müssten.  Auch hier wieder der falsche Zeilindex verantwortlich.
die Suche nach "love" ergibt 3 Ergebnisse, alle jedoch dieselben, wobei es natürlich 3 verschiedene sein müssten. Auch hier wieder der falsche Zeilindex verantwortlich.
Bildschirmfoto 2013-09-24 um 18.57.41.png (29.2 KiB) 4837 mal betrachtet
die Suche nach "eat" gibt alle 9 vorhandene (unterschiedliche) Ergebnisse zurück — so soll es eben sein! Nur ist es das leider nicht immer… —> ??
die Suche nach "eat" gibt alle 9 vorhandene (unterschiedliche) Ergebnisse zurück — so soll es eben sein! Nur ist es das leider nicht immer… —> ??
Bildschirmfoto 2013-09-24 um 19.02.39.png (54.22 KiB) 4837 mal betrachtet
Ich verweise hier noch einmal auf die 5 Fragen am Anfang… :D

Vielleicht kann jemand mir helfen, wenn es nicht zu kompliziert oder wirr ist… Ich wäre sehr dankbar dafür, oder auch für einen völlig anderen Lösungsansatz zu diesem Zwecke…

Milliarden Dank!!!!
Æ

Re: wie arbeitet die VERGLEICH (Funktion) ??

Verfasst: Di, 24.09.2013 20:51
von balu
Hallo Amdur,
Also ich kann außer dem Screenshot natürlich auch eine Beispieldatei hochladen
Nicht warten bis das Du eine Aufforderung für eine Beispieldatei bekommst, sondern sofort machen. Die screenis sind wohl in diesem speziellen Falle, wegen der anderen Schrift, nicht ganz verkehrt, aber sie dienen nur teilweise als Ergänzung.

allerdings ist sie voll mit Devanagari-Zeichen und ich weiß nicht, ob der Rechner sie korrekt darstellen wird.
Das dürfte wohl ehern zweitrangig sein, da die Problem-Formel in der Datei die höhere Priorität bestizt die man auch so genauer unter die Lupe nehmen kann.

Auch ist die Tabelle noch etwas unübersichtlich und ohne Struktur mit Querbeet-Bezügen.
Dann sag uns ganz einfach: "Die Problem-Formel steht da und da, und sie soll den Bereich ... verarbeiten" oder so ähnlich. Wo ist das Problem dabei?


Code: Alles auswählen

VERGLEICH(B9;Verbs.A$4:A$10000;0)
Für eine Stichwortsuche ist die Formel so nicht zu gebrauchen. Dazu müsstest Du mit regulären Ausdrücken arbeiten, also so in etwa:

Code: Alles auswählen

VERGLEICH(".*"&B9".*";Verbs.A$4:A$10000;0)
Und nicht vergessen in den Optionen die reg-Aus zu aktivieren.
Das ist jetzt nur mal so aus der Hüfte geschossen.


Ich habe da aber so ein ganz dumpfes Gefühl, das mir sagt; Das Du dein Ziel nicht so ganz einfach mit einer VERGLEICH erreichen wirst. Wahrscheinlich musst Du noch mehr einbauen. Aber ohne Beispieldatei is nix mit Hilfe geben.


Gruß
balu

Re: wie arbeitet die VERGLEICH (Funktion) ??

Verfasst: Mi, 25.09.2013 10:02
von Amdur Eledhwen
Hi balu
Danke für rasche Antwort & Geduld!
balu hat geschrieben:Nicht warten bis das Du eine Aufforderung für eine Beispieldatei bekommst, sondern sofort machen.
oookay, sorry dafür… ist halt etwas aufwendig, das brauchbare übersichtlich herauszufiltern.
Hier der entscheidende Auszug aus der Datei:

An dieser Stelle möchte ich erwähnen, dass das bisherige Problem indirekt gelöst werden konnte — wobei sich hierdurch leider ein neues Problem formuliert.
Der Grund, weshalb die Vergleich-Funktion nicht korrekt gearbeitet hatte, war der, dass die Suchmatrix (i.e. die Verben), aktuell nicht alphabetisch sortiert waren und somit gleiche Einträge sich ad infinitum wiederholten. Durch Sortieren konnte das behoben werden und es werden nun alle erwünschten Ergebnisse angezeigt.
Vergleich-Funktion.ods
In dieser Datei sind die regulären Ausdrücke aktiviert — die Stichwortsuche funktioniert jetzt, deshalb, weil die Suchmatrix nun alphabetisch sortiert wurde, was vorher nicht der Fall gewesen war.
(121.83 KiB) 163-mal heruntergeladen
Es ist natürlich so, wie du sagst, dass die Stichwortsuche ohne reguläre Ausdrücke nicht auskommt. Jene hatte ich zu diesem Zwecke auch aktiviert. Die Vergleich-Funktion selbst (in dieser Arbeitsmappe) benützt jedoch keinerlei reguläre Ausdrücke, sondern sucht nur nach exakten Übereinstimmungen der Ergebnisse in der Suchmatrix um den neuen Zeilenindex auszuspucken. Seit die regulären Ausdrücke aktiviert worden sind, funktionieren die Vergleich-Funktionen, die ich an anderer Stelle bereits benutzte, nun eben nicht mehr. Das ist in der hochgeladenen Datei beispielhaft zu sehen:

In der "Verbs"-Tabelle kann in A2 per Gültigkeit ein Verb ausgesucht werden. Wenn reguläre Ausdrücke in Formeln inaktiv sind (und eben leider nur dann), wird in B2 das Hindi-Äquivalent mit Angabe/Hyperlink zur Zelle ausgegeben. Seit die regulären Ausdrücke aktiviert sind, funktioniert dieser Algorithmus nicht mehr (leere Zelle).
Deshalb komme ich auf meine eingehende Frage zurück: wie funktioniert die Vergleich-Funktion? (an ihr liegt der Fehler schließlich)
Bisher konnte sie innerhalb einer Zellenmatrix nach einer Zelle suchen und den Zeilenindex ausgeben. Wie muss ich sie umformulieren, damit sie bei aktivierten regulären Ausdrücken trotzdem die Zelle findet?

In der Datei: (falls noch interessant)

Tabelle: Search
B3: Stichwortsuche (i.e. "eat", "lo", "bla" …)
C3: Suchalgorithmen (per Gültigkeit)
D3: erster Eintrag der Ergebnisse
C5: Anzahl Übereinstimmungen

E10:E40: Vergleich-Funktionen für Zeilenindizes (noch recht komplex, womöglich simpler zu programmieren) —> funktionieren jetzt, wo die Verben alphabetisch sortiert sind.

Tabelle: Verbs
A2: Auswahl (English)
B2:O2: Parameter des Verbes, inkl. Zeilenindex und Verlinkung (funktioniert bisher nur, wenn reguläre Ausdrücke deaktiviert sind, deshalb die Frage, wie die Vergleich-Funktion aussehen muss, damit bei aktiven regulären Ausdrücken das gleiche Ergebnis möglich ist!?)

Formel in B2, quasi: WENN("vorhanden";HYPERLINK(Zelle;"Name (# Zeilenindex)"))

Code: Alles auswählen

WENN(ODER(A2="";ZÄHLENWENN(A4:A99998;A2)=0);"";HYPERLINK("#B"&VERGLEICH(A2;$A$4:$A$99995;0)+3;VERKETTEN(SVERWEIS(A2;A4:B99998;2;0);" (#";VERGLEICH(A2;$A$4:$A$99989;0)+3;")")))
Problem:
Wenn reguläre Ausdrücke aktiv:

Code: Alles auswählen

VERGLEICH(A2;$A$4:$A$99995;0)+3  —>  leere Zelle
Wenn reguläre Ausdrücke inaktiv:

Code: Alles auswählen

VERGLEICH(A2;$A$4:$A$99995;0)+3  —>  [Hindi Verb] (# Zeilenindex)
wie also muss ich die Formel umschreiben damit es funktioniert???

tut mir Leid, dass es wieder so voluminös wurde, aber ich weiß echt nicht, wie ich es simpler hätte fassen können!!
Danke für die Hilfe, ich weiß das sehr zu schätzen.

best
Æ

Re: wie arbeitet die VERGLEICH (Funktion) ??

Verfasst: Mi, 25.09.2013 10:34
von Amdur Eledhwen
hooold on!
bevor hier wer auf meinen letzten Beitrag Bezug nimmt, muss ich das noch mal revidieren…
der Fehler wird noch ein weiterer sein, der mit der Vergleich-Funktion nichts zu tun hat!

In dem o.g. Code

Code: Alles auswählen

=WENN(ODER(A2="";ZÄHLENWENN(A4:A99998;A2)=0);"";HYPERLINK("#B"&VERGLEICH(A2;$A$4:$A$99995;0)+3;VERKETTEN(SVERWEIS(A2;A4:B99998;2;0);" (#";VERGLEICH(A2;$A$4:$A$99989;0)+3;")")))
muss offenbar etwas enthalten sein, was nun als regulärer Ausdruck gewertet wird (vorher waren diese nicht aktiviert) und somit zu einer leeren Zelle führt. Die ZÄHLENWENN() Funktion gibt 0 aus, wenn reguläre Ausdrücke aktiv sind — warum?? Da meine Tabellen einige ZÄHLENWENN-Funktionen enthalten, wäre es ungünstig, wenn diese nun nicht mehr richtig funktioniert, und wer weiß, welche Funktionen das noch betrifft…

Auch wenn es für die Ermittlung des Zeilenindex' noch eine weitere Möglichkeit gibt, die zuverlässig ist, nämlich die Matrixformel:

Code: Alles auswählen

{=MAX(WENN(A4:A99971=A2;ZEILE(A4:A99971);""))}
so ist das Problem nun, dass sämtliche anderen Funktionen nicht mehr korrekt arbeiten.
Woran kann das jetzt liegen??

Oh mæn, this is maaad!

Re: wie arbeitet die VERGLEICH (Funktion) ??

Verfasst: Mi, 25.09.2013 16:35
von Amdur Eledhwen
okay, es scheint einzig und allein ein Problem der regulären Ausdrücke zu sein, was die Fehlermeldungen bzw. falschen Werte verursacht.

deshalb habe ich die passendere Frage hier gestellt (Thema hiermit verlegt):
viewtopic.php?f=2&t=62415