Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Instr mit Platzhaltern möglich?

Forumthread: Instr mit Platzhaltern möglich?

Instr mit Platzhaltern möglich?
10.07.2020 19:55:19
Hermann
Hallo zusammen,
in Dateinamen unterschiedlichster Länge suche ich mit Instr z.B. "- 01 -".
Funktioniert mit
Position = InStr(Dateiname, "- 01 -")
einwandfrei.
Nun kann aber statt 01 auch 02, 03, 04 bis 99 alles vorkommen.
Habe bereits * ? # ausprobiert, mache aber anscheinend etwas falsch.
Wer kann helfen?
Vielen Dank vorab!
Hermann
Anzeige

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Instr mit Platzhaltern möglich?
10.07.2020 20:08:17
Luschi
Hallo Hermann,
warum googelst Du nicht! Ich habe das getan mit: vba instr Platzhalter
und schon fiel es mir wie die Schuppen aus den Haaren: Like statt =
Gruß von Luschi
aus klein-Paris
AW: Instr mit Platzhaltern möglich?
10.07.2020 21:48:39
Hermann
Hallo Luschi,
natürlich habe ich vorher gegoogelt und auch "Like" gefunden und ausprobiert, aber - sorry - nicht erwähnt.
Nur Dein Vorschlag
Position Like InStr(…
funktioniert eben nicht.
Position ist eine Variable, die gefüllt werden.
Vielleicht ist es ja auch nur ein kleiner Syntaxfehler.
Gruss
Hermann
Anzeige
AW: Instr mit Platzhaltern möglich?
10.07.2020 22:34:08
Daniel
Hi
Like kann nur ermitteln, ob zwei Texte nach den Regeln übereinstimmen bzw ob der gesuchte Text im langen Text enthalten ist, aber keine Position ermitteln.
Entweder du nimmst die VBA-Variante von SUCHEN (mit WorksheetFunction.? Englisch Bezeichnung bitte selber suchen), das kann mit den Jokern ? und * arbeiten um Positionen zu finden (allerdings nicht mit # für Ziffern)
Oder du durchsuchst mit einer Schleife den Text Zeichen für Zeichen, dabei kannst du dann Like verwenden.
LangText = "xxxxx -12- xxx"
Suchtext = "-##-"
For POS = Len(LangText) - Len(Suchtext) + 1 To 1 step - 1
IF mid(LangText, POS, len(Suchtext)) Like Suchtext then exit for
Next
Gruß Daniel
Anzeige
AW: Instr mit Platzhaltern möglich?
10.07.2020 22:36:32
Werner
Hallo,
was mir überhaupt nicht klar ist, was hast du eigentlich vor?
Gruß Werner
AW: Instr mit Platzhaltern möglich?
10.07.2020 22:44:00
Hermann
Hallo Werner,
möchte den Dateinamen ändern, indem alles was links von 01, 02, 03 … 99 steht abgeschnitten wird. Das funktioniert dann auch wie gewünscht, aber deshalb brauche ich die Position.
Gruss
Hermann
Anzeige
Wenn alles,...
11.07.2020 10:05:31
Case
Hallo Hermann, :-)
... was links von der Zahl steht abgeschnitten werden soll, könntest du alternativ auch "RegExp" nehmen: ;-)
RegEx Beispiel...
Das kannst du direkt in deiner Sub nutzen, oder als Funktion mit Rückgabe aufrufen - siehe Beispieldatei.
Servus
Case

Anzeige
Das ist mit der UDF VLike möglich, ...
11.07.2020 02:13:00
Luc:?
…Hermann,
die den Like-Operator ggf mit Instr verbindet. Die kannst du sowohl in einer ZellFml als auch in einer VBA-Prozedur benutzen. Ohne 3.Argument (bzw diesem =0) fktioniert sie wie der vbOperator Like, mit 3.Arg zusätzlich noch wie Instr (bei 1 → letzte Stelle des SuchBegriffs der 1.Fundstelle von links) bzw wie InstrRev (bei -1 → 1.Stelle des SuchBegriffs der 1.Fundstelle von rechts). Damit wäre die 1.Position der gesuchten einmaligen (!) ZeichenKombi (-) im Namenstext mit folgd Fml möglich: pos = VLike(namenstext, "*- ## -*", -1)
Als ZellFml zB: =TEIL(A1;VLike(A1;"*- ## -*";-1);99) → Hier Link integriert!
Morhn, Luc :-?
„Die universelle Befähigung zur Unfähigkeit macht jede menschliche Leistung zu einem unglaublichen Wunder.“ Stapps ironisches Paradoxon
Nichtsdestotrotz Durchblick verbessern mit …

Anzeige
AW: Instr mit Platzhaltern möglich?
11.07.2020 09:19:07
Sigi
Hallo Hermann,
pack die InStr() in eine Schleife. Da nur die Ziffern 01 - 99 vorkommen können, sind das ja nur 99 (od. bei mir 100) Schleifen. Für VBA ein Klacks!
(s. Mappe) mit Fkt. InStr00()
Sigi
https://www.herber.de/bbs/user/138962.xlsm
Anzeige
Gelöst! Vielen Dank!
11.07.2020 10:47:47
Hermann
Für alle Ideen und Vorschläge vielen Dank!
Habe wieder einiges gelernt. Bin noch am Feinschliff (tendiere zu der Schleifenlösung).
Gruss
Hermann
am einfachsten mit Suchen, in VBA:
11.07.2020 13:14:42
Daniel

Position = Worksheetfunction.Search("- ? -", Dateiname)
Gruß Daniel
Perfekt -> am einfachsten mit Suchen, in VBA
11.07.2020 14:20:36
Hermann
Einfacher geht's wirklich nicht.
Danke
Hermann
Anzeige
Nachfrage zu: am einfachsten mit Suchen, in VBA
11.07.2020 22:08:54
Hermann
Hallo Daniel,
kann es sein, dass in Worksheetfunction.Search("- ? -", Dateiname) nur die Platzhalter ? funktionieren und ## für Zahlen nicht?
Funktioniert mit ? natürlich, wollte aber mit ## auf Nummer sicher gehen, weil es um rund 40.000 Dateien geht, die umbenannt werden sollen.
Gruss
Hermann
Anzeige
Richtig, Suchen kennt nur * und ?
11.07.2020 22:38:06
Daniel
Mit VLike wär's möglich gewesen! owT
12.07.2020 02:33:40
Luc:?
:-?
So passt's für mich ...
13.07.2020 17:59:46
Hermann
Habe mich letztendlich für die Schleifenlösung entschieden, die - für mich überraschend - sehr schnell ist.
Nochmals danke für alle Tipps und Hinweise!
Gruss
Hermann
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Instr mit Platzhaltern in Excel VBA


Schritt-für-Schritt-Anleitung

Um in Excel VBA mit Platzhaltern (Wildcards) zu arbeiten, insbesondere mit der InStr-Funktion, kannst Du folgende Schritte befolgen:

  1. Syntax der InStr-Funktion: Die grundlegende Syntax lautet:

    Position = InStr(Startposition, String1, String2, Vergleich)
    • Startposition: Die Position, von der aus die Suche beginnen soll.
    • String1: Der Text, in dem gesucht werden soll.
    • String2: Der Text, nach dem gesucht wird.
    • Vergleich: Optional, gibt an, ob Groß-/Kleinschreibung beachtet werden soll.
  2. Verwendung von Like: Anstelle von InStr kannst Du auch den Like-Operator verwenden, um mit Wildcards zu arbeiten. Zum Beispiel:

    If String1 Like String2 Then
       ' Code hier
    End If
  3. Beispiel mit Schleife: Wenn Du die Position eines Musters mit Zahlen (01 bis 99) suchen möchtest, kannst Du eine Schleife verwenden:

    Dim LangText As String
    Dim Suchtext As String
    Dim POS As Integer
    
    LangText = "xxxxx -12- xxx"
    Suchtext = "-##-"
    For POS = Len(LangText) - Len(Suchtext) + 1 To 1 Step -1
       If Mid(LangText, POS, Len(Suchtext)) Like Suchtext Then Exit For
    Next POS

Häufige Fehler und Lösungen

  • Fehler bei der Verwendung von Wildcards: Wenn Du ? und * verwendest, funktioniert dies nur für Buchstaben und nicht für Ziffern. Stelle sicher, dass Du den Like-Operator korrekt anwendest.
  • Syntaxfehler: Achte darauf, dass Du bei der Verwendung von InStr und Like die Syntax genau einhältst. Ein kleiner Fehler kann dazu führen, dass Dein Code nicht funktioniert.
  • Unterschied zwischen InStr und Like: Denke daran, dass InStr die Position zurückgibt, während Like nur überprüft, ob eine Übereinstimmung vorliegt.

Alternative Methoden

  1. Verwendung der WorksheetFunction.Search: Diese Methode erlaubt es Dir, Platzhalter wie ? und * zu verwenden:

    Position = WorksheetFunction.Search("- ? -", Dateiname)

    Beachte, dass dies nur mit ? funktioniert, nicht mit ## für Ziffern.

  2. Reguläre Ausdrücke (RegExp): Eine leistungsstarke Methode, um komplexe Muster zu suchen. Du kannst die RegExp-Bibliothek in VBA verwenden, um flexiblere Suchen durchzuführen.


Praktische Beispiele

Hier ist ein einfaches Beispiel, wie Du den InStr-Befehl mit Wildcards verwenden kannst:

Dim Dateiname As String
Dim Position As Integer

Dateiname = "example -12- filename"
Position = InStr(Dateiname, "- ?? -")

If Position > 0 Then
    MsgBox "Position gefunden: " & Position
Else
    MsgBox "Keine Übereinstimmung gefunden."
End If

In diesem Beispiel wird die Position des Musters in einem Dateinamen gesucht.


Tipps für Profis

  • Optimierung der Schleifen: Wenn Du viele Dateien verarbeiten musst, optimiere Deine Schleifen, um die Ausführungsgeschwindigkeit zu erhöhen.
  • Verwende InstrRev: Für die Suche von hinten nach vorne kannst Du die InstrRev-Funktion nutzen, was in einigen Fällen nützlich sein kann:
    Position = InStrRev(Dateiname, "- 12 -")

FAQ: Häufige Fragen

1. Kann ich mit InStr nach Ziffern suchen? Ja, aber Du musst sicherstellen, dass Du die richtigen Wildcards verwendest. InStr selbst unterstützt keine speziellen Wildcards für Ziffern.

2. Was ist der Unterschied zwischen InStr und Like? InStr gibt die Position zurück, an der die Übereinstimmung gefunden wurde, während Like nur überprüft, ob eine Übereinstimmung vorliegt, ohne die Position anzugeben.

3. Wie kann ich eine Schleife für die Suche verwenden? Du kannst eine Schleife verwenden, um über den Text zu iterieren und Like zu verwenden, um nach Mustern zu suchen. Ein Beispiel findest Du in der Schritt-für-Schritt-Anleitung.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige