Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
188to192
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
188to192
188to192
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

InStr vs Find

InStr vs Find
06.12.2002 12:03:56
Andreotti
Hi Leute -
wer weiss, welche Methode schneller abläuft?
1. InStr
2. Find/FindNext
Danke schonmal,
Andreotti

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: InStr vs Find
06.12.2002 12:34:42
ANdreas
Hallo Andreotti,

InStr und Find haben zwei unterschiedliche Anwendungsbereiche. InStr verwendet man um in einer Zeichenkette etwas zu suchen. Find dagegen um in einem Zellbereich etwas zu suchen.
InStr gibt daher eine Zahl (erste Fundstelle des Suchtext), dagegen liefert Find ein Range-Objekt zurück. Mehr dazu in der Hilfe der jeweiligen Befehle!

Kannst nartülich auch hier fragen, wenn Du ein spezielles Problem hast.
Hoffe das hilft weiter,
Andreas

Re: InStr vs Find
06.12.2002 12:42:29
Andreotti
Hi ANdreas,
Naja, das mit den Anwendungsbereichen war mir wohl klar.

Ich suche (Teil-)Zeichenfolgen innerhalb der Zeichen von Zellinhalten, und dies über einen relativ grossen Zellbereich.
Es kommen also beide in Frage.

Die gesuchte Zeichenfolge charakterisiert sich dadurch, dass es immer ganze Worte sind, die aber Am Anfang, in der Mitte, oder am Ende des Zellinhaltes stehen können.

Derzeit separiere ich (ein wenig aufwendig) die Teilzeichenfolgen der zu durchsuchenden Zellen in einzelne Zellen, und Suche dann mit Find.

Ich fragte mich nun, ob es Sinn macht, den ganzen Quark auf InStr umzubauen...

*lg, Andreotti

Anzeige
Re: InStr vs Find
06.12.2002 12:52:25
ANdreas
Hallo Andreotti,

es wäre etwas verständlicher wenn Du mal ein konkretes Beispiel gibst, bzw. Deinen bisherigen Code postest.

Allgemein sobald man "in Zellbereichen sucht", verwende Find(). Du kannst dort auch Parameter mit übergeben, um nicht nur in ganzen Zellen zu suchen. Also als Beispiel:

Set c = Range("A1:A100").Find(What:="hallo", LookIn:=xlValues, LookAt:=xlPart)
Sucht im Bereich A1:A100 nach "hallo", egal wo es in der jeweiligen Zelle steht (also ob mitten im Text oder am Anfang). Willst Du allerdings genau wissen, an welcher Stelle, dann musst es mit InStr(c.Value, "hallo") ermitteln.

Hoffe das hilft weiter,
Andreas

Anzeige
Re: InStr vs Find
06.12.2002 13:04:21
Andreotti
Hi ANdreas,
danke, dass Du Dich meiner Fragen annimmst.
Ich hatte aus anderem Grund schon einen Post hier im Forum, in dem mein Code enthalten ist:

https://www.herber.de/forum/messages/189762.html

Ich würde mich sehr freuen, wenn Du da mal einen Blick frauf werfen könntest.

Liebe Grüsse,
Andreotti

Re: InStr vs Find
06.12.2002 14:03:15
ANdreas
Hallo Andreotti,

normalerweise schrecken solche lange Fragen/Codeausschnitte eher ab, da ist es hilfreicher, wenn Du ne Beispieldatei uploadest.
Aber ich hab mich mal durchgegraben. ;-)
Es ist ganz klar wann der Fehler in Deinem Testaufruf auftritt. Und zwar genau dann wenn der Suchbegriff nur einmal in dem Bereich vorkommt. Dann wird arrTreffer nur für den ersten Eintrag (intZaehler=1) gefüllt. IntZaehler wird dann hochgezählt, aber wenn der Suchbegriff kein zweites mal gefunden wird, wird für arrTreffer kein 2. Eintrag vorgenommen, beim Testen willst Du aber auf diesen dann nicht existierenden Eintrag zugreifen, was natürlich einen Fehler wirft.

Um das zu umgehen müsste Du vorher intZaehler-1 nochmal abfragen, ob es wirklich 2 ist!

Hoffe das hilft weiter,
Andreas

Anzeige
Re: InStr vs Find
06.12.2002 18:05:31
Andreotti
Hey Andreas -
nu funzt mein Code.

Hab wie folgt angepasst:
1. In der Do Schleife im IF für intZaehler = 1 das ReDim entfernt, ebenso die Anweisung, mit der ich beginne, das Array zu füllen.

2. In der Do Schleife im IF für intZaehler > 1 ein Unter-IF mit intZaehler = 2 (resp intZaehler > 2) eingeführt, welches ReDim bzw ReDim Preserve beim ersten Doppel-Treffer steuert.

3. Hilfsweise ein intZaehlerOld eingeführt, damit bei der Übergabe zum Userform die erste Runde übergangen wird.

4. Ausserdem hatte ich im Array die beiden Dimensionen in der falschen Reihenfolge, also arrTreffer(1 To intZaehler, 1 To 3) anstatt richtigerweise: arrTreffer(1 To 3, 1 To intZaehler).

Danke nochmal & Greetz,
Andreotti



Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige