Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1564to1568
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
Inhaltsverzeichnis

instr und like kombinieren

instr und like kombinieren
29.06.2017 12:01:46
Florian
Hallo liebes Forum,
ich möchte in einem String jeweils die Position zurückgemeldet bekommen, an der einem "g" eine Zahl vorsteht.
Mit Like kann man mit dem Wildcard-Operator für Zahlen zumindest schonmal rausfinden, ob eine derartige Kombination im String überhaupt vorhanden ist:
meinString Like "*#g*" = true .....
gibt es einen Wildcardoperator für Zahlen, der auch mit Instr funktioniert?
instr(1, like "*#g*", vbCompareText) funktioniert jedenfalls nicht.
Vllt kann mir einer von euch weiterhelfen.
Bis hierhin schon mal vielen Dank fürs Lesen :-)
Florian

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: instr und like kombinieren
29.06.2017 12:51:19
Michael
Hallo!
Würde ich per Regular Expressions überprüfen:
Sub a()
Dim a$, b$, c$, d$, arr, i&
Dim Rex As Object
Set Rex = CreateObject("VBScript.RegExp")
Rex.Pattern = "\dg"
Rex.Global = True
a = "Das ist ein gString"
b = "Auch 1g String"
c = "Der 25g String"
d = "Das ist Keiner"
arr = Array(a, b, c, d)
For i = LBound(arr) To UBound(arr)
MsgBox "Teste den String [" & arr(i) & "] auf [#g]..."
If Rex.test(arr(i)) Then
MsgBox "Der String [" & arr(i) & "] enthält [#g]"
Else:
MsgBox "Der String [" & arr(i) & "] enthält KEIN [#g]"
End If
Next i
End Sub
LG
Michael
Anzeige
Ich vermute, Michael, dass das nicht das ist, ...
29.06.2017 14:05:59
Luc:-?
…was Florian bezweckt. Das Problem ist mir nämlich durchaus vertraut und RegExp kann in diesem einfachen Fall auch nicht mehr liefern als Like, aber da Instr versucht wurde, ist anzunehmen, dass die Position dieses g oder gar einer ganzen Zahl+g gesucht ist.
Tja, Florian,
das geht natürlich nicht und es gibt in VBA auch keine Fertig-Methode für so etwas. Das darfst du also selbst pgmmieren → mit Like feststellen, ob #g vorhanden und dann mit Instr jedes g oder jede Ziffer suchen und die Vorgänger bzw Nachfolger kontrollieren. So etwas habe ich in 2 UDFs gemacht, mit denen man das dann sogar in einer ZellFml feststellen könnte, bspw so:
=VLike(textbezug;"*#g*";-1) → Position von # bzw 0
=VLike(textbezug;"*#g*";1) → Position von g bzw 0
=VLike(textbezug;"*#g*") → WAHR oder FALSCH
Man könnte aber auch mit MaskOn kombinieren, zB so: =WENN(VLike(textbezug;"*#g*");MaskOn(textbezug;"num";"g"))
MaskOn: https://www.herber.de/cgi-bin/callthread.pl?index=1344962#1345181
VLike: https://www.herber.de/cgi-bin/callthread.pl?index=1247144#1247699
Letztere enthält auch Möglichkeiten, die Position zu bestimmen, falls du das selbst schreiben willst (Zeilen mit Verwendung der unpublizierten UDF VPairs wurden hier absichtl auskommentiert!).
Feedback nicht unerwünscht! Gruß, Luc :-?
Besser informiert mit …
Anzeige
Ah, dass Pos gesucht, hab ich überlesen, naja, owT
29.06.2017 14:23:40
Michael
AW: Ah, , hab ich überlesen, naja, owT
29.06.2017 15:09:43
Florian
Hi Luc,
das ist zwar nicht das was ich hören wollte, aber immerhin brauche ich es nicht mehr weiter versuchen.
Dann werde ich mir was programmieren....
schönen Tag
Florian
Ich hatte auch Vorschläge gemacht und Links ...
30.06.2017 02:48:49
Luc:-?
…geliefert, Florian,
du musst also das Rad nicht unbedingt neu erfinden… ;-]
Luc :-?
AW: instr und like kombinieren
29.06.2017 15:05:19
Florian
Hallo Michael,
vielen Dank für deine Antwort. Werde ich probieren.
Gehe ich zurecht davon aus, dass es bei instr keinen Platzhalter für Zahlen gibt?
Grüße
Florian
Ja, siehe v.a. auch Lucs Antwort!!! owT
29.06.2017 15:09:59
Michael
AW: instr und like kombinieren
29.06.2017 15:21:47
Daniel
Hi
nein, gibt es nicht.
da musst du schon mit einer Schleife prüfen, z.B. so:
txt = "aaa 1g bbb"
for i = 1 to len(txt) - 1
if mid(Txt, i, 2) like "#g" then Exit for
next
if i = len(txt) then i = 0

oder eben so
txt = "aaa 1g bbb"
for i = 0 to 9
i = instr(txt, x & "g")
if i > 0 then Exit for
next
das Ergebnis i ist dann anlaog einem Instr(txt, Ziffer&"g")
(wobei es kleine Unterschiede in beiden Varianten gibt, wenn es mehrere Fundstellen im Text gibt. die erste Variante findet auf jeden fall das erste Vorkommen, die zweite Variante findet das Vorkommen mit der kleinsten Zahl)
Gruß Daniel
Anzeige
AW: Basierend auf meinem ersten Code...
29.06.2017 15:50:10
Michael
...kann ein "einfaches Auszählen" auch so ablaufen - hier werden alle Positionen von "g" mit einer Ziffer davor in einem String gesammelt...
Sub a()
Const SEP$ = ","
Dim a$, b$, c$, d$, e$, arr, brr, i&, j&, s$
a = "Das ist ein gString"
b = "Auch 1g String"
c = "Der 25g String"
d = "Das ist Keiner"
e = "Da 33g größer als 22g, zwei!"
arr = Array(a, b, c, d, e)
ReDim brr(0 To UBound(arr), 1 To 2)
For i = LBound(arr) To UBound(arr)
For j = 2 To Len(arr(i))
If Mid(arr(i), j, 1) Like "g" Then
If IsNumeric(Mid(arr(i), j - 1, 1)) Then
s = s & j & SEP
End If
End If
Next j
brr(i, 1) = arr(i): brr(i, 2) = s
s = vbNullString
Next i
For i = LBound(brr) To UBound(brr)
Debug.Print "Str: " & brr(i, 1), "Pos: " & brr(i, 2)
Next i
Erase arr: Erase brr
End Sub
Du hast ja schon sehr viele Infos bekommen, aber vielleicht kannst Du das ja (auch) brauchen.
LG
Michael
Anzeige

64 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige