Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Fortgeschrittenes VBA: String "zerschneiden"
#1
Hallo zusammen,

bräuchte einen VBA-Experten.
Folgende Problemstellung:
Ich habe einen sehr langen String, in dem sich immer wieder bestimmte Zeichen wiederholen und ich den unterschiedlich langen Text dazwischen auslesen und in eigene Zellen schreiben möchte.
Beispiel:
Langer String in Zelle A1: 
"#A#Text1a#/A#irgendwasdazwischen#B#Text1b#/B#irgendwasdazwischen#A#Text2aa#/A#irgendwasdazwischen#B#Text2bb#/B#irgendwasdazwischen#A#Text3aaa#/A#irgendwasdazwischen#B#Text3bbb#/B#..."
Jetzt hätte ich gerne in fortlaufenden Zellen der Spalte A und B die Infos ausgelesen, die jeweils zwischen #A# und #/A# bzw. zwischen #B# und #/B# stehen:
          A                     B
2:    Text1a           Text1b
3:    Text2aa         Text2bbb
4:    Text3aaa       Test3bbb
...
Solange es noch Infos im String gibt, die dazu passen.

DANKE!
Antworten Top
#2
Hallo,

ich würde zuerst bei "Text" splitten:

Code:
Ar = split(cells(1,1),"Text")

mfg
Antworten Top
#3
Das aber komisch erklärt.

Sind a und b (aa... und bb...) denn irgendwie eindeutig (also im Zweifel etwas länger)?
Antworten Top
#4
Hi, sorry - hätte man die Vorschau Option nutzen sollen.
Hatte "<" und ">" Zeichen verwendet und das hat etwas das Beispiel zerstört.

Die verschiedenen Texte sollen nur verdeutlichen, dass es unterschiedlich lange Texte sein können.
Deshalb wird auch die Split Funktion mit "Text" als Sucher nicht funktionieren.
Antworten Top
#5
Hallo

Das sind also öffnende und schließende Tags, zwischen denen Du den Inhalt auslesen willst. HTML wird es vermutlich nicht sein. Vielleicht ein Ausschnitt aus XML? Die Frage, die ich mir stelle ist, heißen die beiden einzigen verwendeten Tags A und B? Oder sind das auch nur Beispiele? Ich denke mit Deinem Beispieltext wird Hilfe schwierig, weil das immer etwas Fischen im Trüben ist. Lade eine Beispiel Text-Datei hoch, in der die original Tags enthalten sind. Wenn der Text dazwischen vertraulich ist, musst Du ihn ersetzen. Auf den kommt es ja nicht an, aber auf die Struktur des Gesamtstrings.

Aso, können öffnende und schließende spitze Klammern auch innerhalb der auszulesenden Texte vorkommen? Falls nicht, kann man die als Indikatoren nehmen, um den Text zu parsen.

Viele Grüße,

Zwenn
Antworten Top
#6
Falls es mit den spitzen Klammern so ist, wie ich fragte, kannst Du es mit Split() prinzipiell so lösen:

Code:
Sub TextSplit()

  Dim textToParse As String
  Dim splitArray() As String
  Dim oneElement As Long
  Dim currRow As Long
 
  currRow = 2
  textToParse = "<A>Text1a</A>irgendwasdazwischen<B>Text1b</B>irgendwasdazwischen<A>Text2aa</A>irgendwasdazwischen<B>Text2bb</B>irgendwasdazwischen<A>Text3aaa</A>irgendwasdazwischen<B>Text3bbb</B>"
 
  'Zuerst an der schließenden spitzen Klammer splitten
  splitArray = Split(textToParse, ">")
 
  'Das Array durchgehen. Jedes Element, das </A oder </B enthält, enthält auch gesuchten Text
  'Elemente ohne </A oder </B verfallen
  For oneElement = 0 To UBound(splitArray)
    'Auf </A prüfen
    If InStr(1, splitArray(oneElement), "</A") Then
      'Text in Tabelle schreiben
      Cells(currRow, 1) = Trim(Replace(splitArray(oneElement), "</A", ""))
    End If
   
    'Auf </B prüfen
    If InStr(1, splitArray(oneElement), "</B") Then
      'Text in Tabelle schreiben
      Cells(currRow, 2) = Trim(Replace(splitArray(oneElement), "</B", ""))
      currRow = currRow + 1
    End If
  Next oneElement
End Sub


Viele Grüße,

Zwenn
Antworten Top
#7
C1:D999: =INDEX(XMLFILTERN("<a><b>"&WECHSELN(WECHSELN(A1;">";"<");"<";"</b><b>")&"</b></a>";"//b");ZEILE(A1:A999)*8-{5.1})

in dem genannten markierten Bezug C1:D999 nicht mit Eingabe, sondern mit Strg-Umsch-Eing abschließen (Formelarray). Fehlerwerte bekommst Du mit =WENNFEHLER(Formel;"") weg.
Antworten Top
#8
Hallo Zwenn, 
vielen Dank. Das geht schon absolut in die richtige Richtung und funktioniert auch problemlos für das gegebene Beispiel.
Leider war das Beispiel wie ich jetzt merke nicht perfekt.
Zusätzliche Herausforderung: Die konkreten Tags, zwischen denen ich die Texte auslesen möchte, sind ähnlich in der Bezeichnung.
Konkret: "Bank" und "BankLeitzahl" ...
Glaube das führt gerade dazu, dass das "A" im Bsp. immer zutrifft... und das macht Probleme. 
Wenn ich aber das ">" am Ende ergänze, funktioniert die "Suche starten" Funktion basierend auf ">" nicht mehr.
Hoffe das war nachvollziehbar. :)
VG
Antworten Top
#9
(20.08.2021, 11:27)Ollowain schrieb: ...
Hoffe das war nachvollziehbar. :)

Hallo Ollowain,

leider sind Deine Ausführungen für mich nicht nachvollziehbar. Lies Dir bitte noch einmal mein erstes Posting durch, beantworte die Fragen daraus und vor allem, lade eine Beispieldatei hoch. Wie Du selbst schreibst, gibt es Probleme, weil die Tagnamen nicht erkannt werden (wenn ich das richtig verstanden habe). Wie soll denn jemand verstehen, was genau Du meinst, wenn nur Du die zu verknüpfende Information in Form der Original Ausgangsdaten kennst?

Noch ein gut gemeinter kleiner Hinweis. Es ist immer eine nette Geste, sich bei allen zu bedanken, die sich fruchtbar an der Diskussion beteiligen oder Dir sogar eine Löung anbieten. Einen Lösungsvorschlag zu ignorieren kommt hingegen sehr unhöflich/ geringschätzig rüber.

Viele Grüße,

Zwenn
Antworten Top
#10
Hallo Zwenn,
sorry, war nicht unhöflich gemeint. Ich hatte nur Probleme, die zweite Lösung überhaupt zu verstehen und habe mich deshalb auf deinen Vorschlag konzentriert.
Natürlich bin ich dankbar für jede angebotene Hilfe. Angel

Bzgl. den Fragen:
- Nein, es ist kein html
- Die Klammern kommen nicht in den Texten vor, die ich auslesen möchte
- Das Problem entsteht (nach meinem Verständnis) gerade noch dadurch, dass die zwei "Identifier-Tags" - "Bank" und "Bankleitzahl" - beide mit "Bank" beginnen.

Hier nochmal ein Beispiel zur Verdeutlichung (oben die Eingabe / unten das gewünschte Ergebnis):


Angehängte Dateien Thumbnail(s)
   
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste