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

Textteil extrahieren

Forumthread: Textteil extrahieren

Textteil extrahieren
15.02.2025 19:43:21
Klaus B aus D
Hallo,

lässt sich anstatt in Spalte A nach einer Ziffer suchen, auch diese Ziffer aus einem String extrahieren, um zum selben Ziel zu kommen?
Bisher klappt der Code so:
Set rng = wks.Range("A2:A120").Find(what:=txtStartNr, LookAt:=xlWhole, LookIn:=xlValues)
Ich möchte nun die festen Inhalte der Spalte A (StartNr) durch die Fremdschlüssel zu einer Tabelle "Teilnehmer" ersetzen. Diese beinhalten eine StartNr, einen Nach- u. einen Vornamen nach diesen Mustern:

4 | Müller, Marga
...
22 | Panzer, Paul
...

Das Feld txtStartNr ist Bestandteil einer UserForm.
Ich benötige also die Zahl aus einem Text, die 1-, 2- oder 3-stellig sein kann.

Gruß Klaus
Anzeige

22
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Textteil extrahieren
15.02.2025 20:25:49
Onur
Warum BESCHREIBST du deine Datei, statt sie oder eine Beispielsversion zu posten?
" die festen Inhalte der Spalte A (StartNr) " ? Wir wissen nicht mal, was in A wirklich steht - nur die Zahl 4 oder der Text "4 | Müller, Marga ".
AW: Textteil extrahieren
15.02.2025 21:11:39
Klaus B aus D
@ Onur
"Wir wissen nicht mal, was in A wirklich steht - nur die Zahl 4 oder der Text "4 | Müller, Marga "."

Habe ich mich so ungeschickt ausgedrückt?
"... anstatt in Spalte A nach einer Ziffer suchen ..." hier fehlt wohl das Wort "zu" vor "Ziffer" und damit habe ich beschrieben, dass in Spalte A Ziffern (Zahlen) stehen.

"... Inhalte der Spalte A (StartNr) durch die Fremdschlüssel ... ersetzen." Die Zelleninhalte in Spalte A (= Ziffern) sollen also zukünftig durch Texte ersetzt werden. Dann folgten zwei String-Beispiele, weil die Eingangsfrage das hier enthielt:
"... diese Ziffer aus einem String extrahieren ...?"

@ Alwin
"LookAt:=xlPart kann du dazu nutzen. Den Suchwert setzt du aus Nr & " |" zusammen."
Ich möchte ja keinen String zusammensetzen, sondern die Ziffern/Zahlen vor dem senkrechten Strich (= Bestandteil des Strings) ermitteln.

Gruß Klaus
Anzeige
AW: Textteil extrahieren
15.02.2025 21:31:47
Onur
Naja, der große Erklärer bist du ja nicht gerade...
Ich vermute mal, du willst einfach nur die Zahl aus dem Text extrahieren. Wenn ja, wieso erwähnst du die Spalte A, den Code oder die Userform? Was haben die damit zu tun?
Wenn dem so ist:
Als Code:
zahl = CInt(Split(txt, "|")(0))

wobei txt dein Text ist - und als Formel
=ZAHLENWERT(LINKS(B1;SUCHEN("|";B1)-1))

Anzeige
AW: Textteil extrahieren
15.02.2025 22:32:42
Alwin Weisangler
Hallo Klaus,

du beschreibst genau das, was ich dir vorgeschlagen hatte.
Du schreibst in was auch immer eine Zahl und setzt den Suchstring aus den darin enthaltenen Wert & " |" und benutzt die Teilstring Suche der Methode .Find.
Wo liegt da das Problem?

Gruß Uwe
AW: Textteil extrahieren
16.02.2025 18:16:27
Klaus B aus D
Hallo Uwe,

ich habe leider immer noch nicht verstanden, wie ich in einem String nach einer Zahl suchen kann.
Diese Zeile liefert einen Laufzeitfehler '13': Typen unverträglich:
    Set rng = wks.Range("B2:B120 ").Find(what:=txtStartNr, LookAt:="B2:B120" & " |", LookIn:=xlValues)


Die Nr. 46 aus dem Beispiel möchte ich ermitteln.
Userbild
Gruß Klaus
Anzeige
AW: Textteil extrahieren
16.02.2025 18:18:09
Onur
Ich habe dir doch 2 Möglichkeiten dafür (Formel und VBA) gepostet !
AW: Textteil extrahieren
16.02.2025 19:13:02
Klaus B aus D
@Onur:
"Ich habe dir doch 2 Möglichkeiten dafür (Formel und VBA) gepostet !"

Das funktioniert ja auch hervorglänzend, doch ich hätte eben auch gerne gewusst, wie man mit der .Find-Methode nach einem Teil eines Zelleninhalts suchen kann.

Ich möchte einfach nur weiterlernen!

Gruß Klaus
Anzeige
AW: Textteil extrahieren
16.02.2025 19:38:33
Onur
Find sucht doch auch nach Textteilen.
Poste endlich eine Datei, wo man sehen kann, was du wo suchen willst.
AW: Textteil extrahieren
16.02.2025 20:38:04
Klaus B aus D
Hier die erbetene Musterdatei:
https://www.herber.de/bbs/user/175713.xlsm
Im zweiten Tabellenblatt steht mein "Wunsch".

Gruß Klaus
Anzeige
AW: Textteil extrahieren
16.02.2025 21:00:07
Onur
Hääähh? Ich glaube, du hast da irgendwie einen "Knoten im Hirn".
FIND sucht einen bestimmten Wert in einem Bereich.
DU jedoch hast doch gar keinen bestimmten Wert, du willst ihn doch erst ermitteln. Wonach GENAU willst du also mit FIND überhaupt suchen ???
Der "gesuchte" Text steht doch IMMER neben dem ursprünglichen Text bzw steckt IM Text - WAS also gibt es da groß zu suchen ?

Guck dir mal die Datei an:
https://www.herber.de/bbs/user/175714.xlsm
Anzeige
AW: Textteil extrahieren
16.02.2025 21:19:13
Piet
Hallo

das ist ein Standard Find Code, aufgezeichnet mit Makro Recorder und modifiziert. Hier gibt es keine Select Funktion!
Die gefundene Zelle befindet sich in der Variablen rFind, mit der MsgBox kann die Zelladresse angezeigt werden.
Wenn du bei LookAt:= einen Range angibst, kann das nicht klappen! Ich denke ich muss die fetten Text nicht erläutern.

Set rFind = Columns(3).Find(what:=Suname, After:=Range("C1"), LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)
If rFind Is Nothing Then Exit Sub
If Not rFind Is Nothing Then MsgBox rFind.Address

mfg Piet
Anzeige
AW: Textteil extrahieren
17.02.2025 00:50:33
Klaus B aus D
Zurück zu meiner Eingangsfrage:
"Lässt sich anstatt in Spalte A nach einer Ziffer zu suchen, auch diese Ziffer aus einem String extrahieren, um zum selben Ziel zu kommen?"

Danke an alle beschäftigten Mitwirkende bei der Lösungssuche.
Mein Code sieht jetzt folgendermaßen aus; er extrahiert Ziffernfolgen (gemäß hochgeladenem Beispiel), die ich als Zahlen nutzen kann:
Public Sub ZahlVorStrichExtrahieren()

Dim Zelle As Range
Dim TextMitZahl As String
Dim Zahl As String
Dim i As Integer
Dim StrichPos As Long

For Each Zelle In ThisWorkbook.Sheets("Wertungspunkte").Range("C1:C" & Cells(Rows.Count, "C").End(xlUp).Row)
TextMitZahl = Zelle.Value ' den Inhalt der gefundenen Zelle (nicht die Adresse) zuordnen
Zahl = "" ' Variable vor Schleifendurchlauf zurücksetzen
' Zahlen stehen in den einzelnen Zellen immer links vor dem senkrechten Strich
StrichPos = InStr(1, TextMitZahl, "|") ' Strich-Pos. finden; 1 = Anfangsposition
For i = 1 To StrichPos - 1 ' Ziffern aufreihen, da Zahlen 1-, 2- od. 3-stellig sein können; _
"-1" wegen des Leerzeichens vor dem senkrechten Strich
Zahl = Zahl & Mid(TextMitZahl, i, 1)
Next i
Zelle.Offset(0, -2).Value = Zahl ' "-2" = Ausgabe der Zahl in Spalte A
Next Zelle
End Sub

Vermutlich gibt es elegantere Lösungen, doch diese kann ich mit meinen geringen Excel-VBA-Kenntnissen verständlich nachvollziehen.

Nochmal DANKE in die Runde.

Gruß Klaus
Anzeige
AW: Textteil extrahieren
17.02.2025 12:44:38
Piet
hallo

so sollte es auch gehen.

mfg Piet



Dim Zahl As Variant, Zelle As Variant
For Each Zelle In ThisWorkbook.Sheets("Wertungspunkte").Range("C1:C" & Cells(Rows.Count, "C").End(xlUp).Row)
Zahl = Left(Zelle, InStr(Zelle, "|") - 1)
Zelle.Offset(0, -2).Value = CInt(Zahl) ' "-2" = Ausgabe der Zahl in Spalte A
Next Zelle
Anzeige
AW: Textteil extrahieren
17.02.2025 15:52:46
Klaus B aus D
Hallo Piet,
leider gibt es eine Fehlermeldung, wenn ich versuche, deinen vereinfachten Code zu nutzen: Laufzeitfehler '5': Ungültiger Prozeduraufruf oder ungültiges Argument.
'Piet von HERBERS Excel Forum

'****************************
Public Sub ZahlVorStrichExtrahieren()
Dim Zahl As Variant, Zelle As Variant
For Each Zelle In ThisWorkbook.Sheets("Wertungspunkte").Range("C1:C" & Cells(Rows.Count, "C").End(xlUp).Row)
Zahl = Left(Zelle, InStr(Zelle, "|") - 1)
Zelle.Offset(0, -2).Value = CInt(Zahl) ' "-2" = Ausgabe der Zahl in Spalte A
Next Zelle
End Sub

Wenn ich die beiden ähnlichen Programme vergleiche, dann fällt mir nichts falsches auf.
Was kann der Grund für das Fehlverhalten sein?

Gruß Klaus
Anzeige
AW: Textteil extrahieren
17.02.2025 17:34:07
GerdL
Hallo Klaus,
dieser Fehler trat auf, wenn der Code über Zellen ohne den | lief.

Public Sub ZahlVorStrichExtrahieren()

Dim Zahl As Variant, Zelle As Variant
With ThisWorkbook.Sheets("Wertungspunkte")
For Each Zelle In .Range("C1:C" & .Cells(Rows.Count, "C").End(xlUp).Row)
If InStr(Zelle, "|") > 1 Then
Zahl = Left(Zelle, InStr(Zelle, "|") - 1)
Zelle.Offset(0, -2).Value = CInt(Zahl) ' "-2" = Ausgabe der Zahl in Spalte A
End If
Next Zelle
End With
End Sub

Gruß Gerd
Anzeige
AW: Textteil extrahieren
17.02.2025 19:02:47
Klaus B aus D
Hallo Gerd,
dein Code läuft tadellos - und ist noch kürzer, als meiner.

Besten Dank.
Gruß Klaus
Begriffsdefinition
16.02.2025 11:47:02
RPP63
Moin!
• eine Ziffer ist ein Textzeichen, welches in eine Zahl umgewandelt werden kann
• wird eine Ziffer in ein Textfeld eingegeben, bleibt es zunächst Text
• um nach einer Ziffer in einer Liste von Zahlen zu suchen, muss
a) der Text mittels IsNumeric(Ziffer(n)) geprüft werden
b) der Range.Find-Methode die mittels CLng(Ziffer(n)) umgewandelte "Textzahl" übergeben werden
Pseudocode
Dim Fund As Range

If IsNumeric(Textbox) Then
Set Fund = Range("A:A").Find(CLng(Textbox), LookIn:=xlValues, LookAt:=xlWhole)
If Not Fund Is Nothing Then 'mach was
End If


Gruß Ralf
Anzeige
AW: Textteil extrahieren
15.02.2025 22:01:56
Onur
Und wenn du, warum auch immer, die Zahl als Text brauchst, lässt du einfach ZAHLENWERT oder CINT weg.
AW: Textteil extrahieren
15.02.2025 20:26:16
Alwin Weisangler
Hallo Klaus,

LookAt:=xlPart kann du dazu nutzen. Den Suchwert setzt du aus Nr & " |" zusammen.

Gruß Uwe
AW: Textteil extrahieren
15.02.2025 21:41:36
Piet
Hallo

oh, oh, habe ich dir Frage richtig verstanden?? Wir werden sehen. Lade den Text in Variable Txt.
Txt = Cells(xx, "A").Value
Zahl = Trim(Left(Txt, InStr(Txt, " ")))

mfg Piet
Anzeige
AW: Textteil extrahieren
15.02.2025 22:39:06
GerdL
Moin
Noch eine linksbündige Möglichkeit.
MsgBox Val(txtStartNr)

Gruß Gerd
AW: Textteil extrahieren
16.02.2025 19:42:31
gerdl
Lookat:= xlPart
Gruss Gerd
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18