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

Forumthread: VBA: String aus String Extrahieren

VBA: String aus String Extrahieren
24.04.2007 16:03:00
Chris
Hallo Liebe Forumsgemeinde!
Ich schreibe eine kleine VBA-Anwendung. Darin möchte ich einen String aus einem String bekommen, den ich aus einer Textdatei lese.
Der komplette String sieht so aus:
"Einheiten pro Kunde vom TYP(RAM1 F) und GROESSE(2)"
Wie schaffe ich es dass ich aus dieser Zeile den Typ "RAM1 F" und die Größe "2" jeweils in einen String bekomme? Also diesen einen String in 2 Stücke zerlege und nur die Werte erhalte, die in den runden Klammern stehen.
Vielleicht weiss jemand Rat!
Vielen Dank,
Gruss
Chris

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: String aus String Extrahieren
24.04.2007 16:25:00
Rudi
Hallo,

Sub tt()
Dim Text As String, x1 As Integer, x2 As Integer, txt1 As String, txt2 As String
Text = "Einheiten pro Kunde vom TYP(RAM1 F) und GROESSE(2)"
x1 = InStr(Text, "(")
x2 = InStr(Text, ")")
txt1 = Mid(Text, x1 + 1, x2 - x1 - 1)
x1 = InStr(x1 + 1, Text, "(")
x2 = InStr(x2 + 1, Text, ")")
txt2 = Mid(Text, x1 + 1, x2 - x1 - 1)
MsgBox txt1 & ", " & txt2
End Sub


Gruß
Rudi
Eine Kuh macht Muh, viele Kühe machen Mühe

Anzeige
AW: VBA: String aus String Extrahieren
24.04.2007 16:26:00
Andi
Hi,
zB so:

Sub t()
Dim myString As String
myString = "Einheiten pro Kunde vom TYP(RAM1 F) und GROESSE(2)"
MsgBox Mid(myString, InStr(myString, "(") + 1, InStr(myString, ")") - (InStr(myString, "(") + 1) _
)
MsgBox Mid(myString, InStrRev(myString, "(") + 1, InStrRev(myString, ")") - (InStrRev(myString,  _
"(") + 1))
End Sub


Schönen Gruß,
Andi

Anzeige
AW: VBA: String aus String Extrahieren
24.04.2007 16:53:00
Chris
Wow, funktioniert...
Vielen Dank an die Antwortschreiber!!
Leider habe ich entdeckt, dass der String auch mal "Stunden" oder "Dienstleistung" heissen kann.
Gibt es irgendwie eine Methode, dass ich das auslesen der 2 Strings absichern kann? D.h. wenn zum Beispiel keine Klammern im String enthalten sind?
Gruss
Chris

Anzeige
AW: VBA: String aus String Extrahieren
ransi
Hallo Chris
Teste mal dieses hier:
Option Explicit


Public Sub test()
Dim str As String
Dim Ausgabe As Variant
Dim SPL
str = "Einheiten pro Kunde vom TYP(RAM1 F) und GROESSE(2)"
str = Replace(str, "(", "")
str = Replace(str, ")", "")
SPL = Split(str, "TYP")
Ausgabe = Split(SPL(1), " und GROESSE")
MsgBox Ausgabe(0) & Chr(13) & Ausgabe(1)
End Sub

ransi
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Strings in VBA extrahieren: So geht's!


Schritt-für-Schritt-Anleitung

Um einen Teilstring aus einem gegebenen String mit VBA zu extrahieren, kannst du die folgenden Schritte befolgen:

  1. Öffne den VBA-Editor in Excel (Alt + F11).

  2. Füge ein neues Modul hinzu (Rechtsklick auf "VBAProject", dann "Einfügen" > "Modul").

  3. Kopiere den folgenden Code in das Modul:

    Sub ExtractSubstrings()
       Dim Text As String, x1 As Integer, x2 As Integer, txt1 As String, txt2 As String
       Text = "Einheiten pro Kunde vom TYP(RAM1 F) und GROESSE(2)"
    
       ' Position der ersten Klammer finden
       x1 = InStr(Text, "(")
       x2 = InStr(Text, ")")
       txt1 = Mid(Text, x1 + 1, x2 - x1 - 1)
    
       ' Suche die nächste Klammer
       x1 = InStr(x1 + 1, Text, "(")
       x2 = InStr(x2 + 1, Text, ")")
       txt2 = Mid(Text, x1 + 1, x2 - x1 - 1)
    
       MsgBox "Typ: " & txt1 & vbCrLf & "Größe: " & txt2
    End Sub
  4. Führe das Makro aus (F5), um die Teilstrings aus der gegebenen Zeichenkette zu extrahieren.


Häufige Fehler und Lösungen

  • Fehler: Klammern nicht vorhanden

    • Wenn der String keine Klammern enthält, wird ein Laufzeitfehler auftreten. Du kannst eine einfache Fehlerbehandlung einfügen, um dies zu vermeiden:
    If InStr(Text, "(") = 0 Or InStr(Text, ")") = 0 Then
       MsgBox "Klammern nicht gefunden!"
       Exit Sub
    End If
  • Fehler: Falsche Indizes

    • Achte darauf, dass du die Indizes für Mid korrekt berechnest, um sicherzustellen, dass du die richtigen Teilstrings extrahierst.

Alternative Methoden

Eine alternative Methode zur Extraktion von Teilstrings ist die Verwendung von Split:

Sub AlternativeExtract()
    Dim str As String
    Dim parts() As String
    str = "Einheiten pro Kunde vom TYP(RAM1 F) und GROESSE(2)"

    ' Klammern entfernen und splitten
    str = Replace(str, "(", "")
    str = Replace(str, ")", "")
    parts = Split(str, " und ")

    MsgBox "Typ: " & Split(parts(0), " vom TYP")(1) & vbCrLf & "Größe: " & parts(1)
End Sub

Praktische Beispiele

Hier ist ein Beispiel zur Verwendung von InStrRev, um die letzten Klammern zu finden:

Sub ExtractLast()
    Dim myString As String
    myString = "Einheiten pro Kunde vom TYP(RAM1 F) und GROESSE(2)"
    MsgBox Mid(myString, InStrRev(myString, "(") + 1, InStrRev(myString, ")") - (InStrRev(myString, "(") + 1))
End Sub

Tipps für Profis

  • Verwende Option Explicit am Anfang deines Moduls, um sicherzustellen, dass alle Variablen deklariert sind.
  • Die Verwendung von Trim kann nützlich sein, um unerwünschte Leerzeichen vor oder nach den Teilstrings zu entfernen.
  • Experimentiere mit Regular Expressions, um komplexere Muster in Strings zu finden.

FAQ: Häufige Fragen

1. Wie kann ich mehrere Teilstrings aus einem String extrahieren?
Du kannst eine Schleife verwenden, um alle Klammerpaare im String zu finden und die gewünschten Teilstrings zu extrahieren.

2. Was kann ich tun, wenn der String nicht immer die gleiche Struktur hat?
In diesem Fall ist es sinnvoll, eine robustere Methode wie Regular Expressions zu verwenden, um flexibler auf verschiedene String-Strukturen zu reagieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige