Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1964to1968
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

Wort aus Zeichenkette extrahieren

Wort aus Zeichenkette extrahieren
26.02.2024 13:27:44
Tim
Hallo zusammen,

ich möchte gern die Farbe aus einer Zeichenkette ermitteln, dazu bin ich im Forum der Sache mit regulären Ausdrücken nähergekommen, jedoch funktioniert das noch nicht perfekt.

Ich möchte gern die Farbe "Black, black oder Black Frame" ermitteln/extrahieren egal was zuvor oder danach steht, wer kann mir dabei helfen?



Private Sub Farbe()
Dim Regex As Object
Dim i As Long

Set Regex = CreateObject("vbscript.regexp")

With Regex
'.Pattern = "(.*)(?=(Black Frame|Black|black))"
.IgnoreCase = False 'ignoriere Groß-Kleinschreibung
.Global = True
End With

For i = 2 To ThisWorkbook.Sheets("Tabelle1").Cells(Rows.Count, 1).End(xlUp).Row

If Regex.test(ThisWorkbook.Sheets("Tabelle1").Cells(i, 1)) = True Then

ThisWorkbook.Sheets("Tabelle1").Cells(i, 2) = Regex.Replace(ThisWorkbook.Sheets("Tabelle1").Cells(i, 1), "")

End If


Next i

Set Regex = Nothing

End Sub

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wort aus Zeichenkette extrahieren
26.02.2024 14:20:49
onur
Ich arbeite nicht mit RegEx.
Sehe ich richtig, dass du nur die gesuchten Wörter aus dem String entfernen willst? Das Wort "extrahieren" ist etwas irritierend.
AW: Wort aus Zeichenkette extrahieren
26.02.2024 14:25:49
Yal
Hallo Tim,

hmm... auch wenn VBA teilweise skryptisch wirken kann, ist es lang kein Hieroglyphen: man kann es lesen, und auch mit wenig English sogar verstehen. Diese Übungsaufgabe wird dir nicht erspart bleiben, wenn Du deinen Code im Griff haben möchte. Ein Beispiel:
.IgnoreCase = False 'ignoriere Groß-Kleinschreibung
Die Frage lautet "soll ich die "case" ignorieren?" Wie lautet dann die Antwort?

Private Sub Farbe()

Dim R As Object
Dim Z As Range 'Z wie Zelle
Dim Erg As Object

Set R = CreateObject("vbscript.regexp")
R.Pattern = "(black frame|black)"
R.IgnoreCase = True 'IgnoreCase: ja bitte, ignoriere gross/klein
R.Global = True
With ThisWorkbook.Sheets("Tabelle1")
For Each Z In Range(.Cells(2, "A"), .Cells(Rows.Count, "A").End(xlUp))
Set Erg = R.Execute(Z.Value)
If Erg.Count Then Z.Offset(0, 1).Value = Erg(0) 'Anzahl an Ergebnis(se): 0 wird als False, alles anderes als True interpretiert, dann gibt das erste Ergebnis zurück
Next
End With
End Sub


VG
Yal
Anzeige
AW: Wort aus Zeichenkette extrahieren
26.02.2024 23:56:54
Daniel
HI

For i = 2 To ThisWorkbook.Sheets("Tabelle1").Cells(Rows.Count, 1).End(xlUp).Row


For each x in Split("Black Frame|Black|black", "|")
if Thisworkbook.Sheets("Tabelle1").Cells(i, 1) Like "*" & x & "*" then
ThisWorkbook.Sheets("Tabelle1").Cells(i, 2) = x
exit for
end if
next
next

AW: Wort aus Zeichenkette extrahieren
26.02.2024 14:56:40
Tim
Hallo Yal,

dein Vorschlag funktioniert wie gewünscht, vielen Dank!

@Onur: mit extrahieren meine ich, dass ich ausschließlich das gesuchte Wort im Ergebnis haben will, die restliche Zeichenkette wird nicht benötigt.
Anzeige
AW: Wort aus Zeichenkette extrahieren
26.02.2024 15:11:30
onur
Da brauchst du doch kein REGEX dafür. Hatte ich bereits erwähnt, dass ich REGEX hasse? :)

Private Sub Farbe()

Dim i, txt
With ThisWorkbook.Sheets("Tabelle1")
For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
txt = UCase(.Cells(i, 1))
If InStr(txt, "BLACK") Then .Cells(i, 2) = "Black"
If InStr(txt, "BLACK FRAME") Then .Cells(i, 2) = "Black Frame"
Next i
End With
End Sub
AW: Wort aus Zeichenkette extrahieren
26.02.2024 16:25:37
Yal
Hallo zusammen,

ja, RegEx ist selten Liebe auf ersten Blick und in dem Fall auch over-engineered.
Wer mit RegEx experimentieren möchte, sollte https://regex101.com/ anschauen.

Um Onurs Code mit einer "Liste am Stück" zusammen zu bringen (falls lange Farbeliste), schlage ich diese Variante vor (bringt sonst keine Mehrwert):
Private Sub Farbe()

Dim i, txt, k

With ThisWorkbook.Sheets("Tabelle1")
For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
txt = .Cells(i, 1).Value
For Each k In Split("black frame;black", ";") 'wichtig: bei Überschneidung wie z.b. "black" in "black frame", immer der längste zuerst
If InStr(txt, k, vbTextCompare) Then 'vbTextCompare = IgnoreCase
.Cells(i, 2).Value = k
Exit For 'gehe sofort an die nächste zelle ran, falls die Farbeliste sehr lang wäre
End If
Next
Next i
End With
End Sub


VG
Yal
Anzeige
AW: Wort aus Zeichenkette extrahieren
26.02.2024 16:36:51
onur
Mit REGEX hat Jemand versucht, eine eierlegende Wollmilchsau zu generieren, für die man eine 50-seitige Anleitung für all die Schalter braucht.
Da lob ich mir noch die alten DOS-Zeiten.

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige