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

Text Extrahierung-

Text Extrahierung-
25.09.2022 12:45:34
El.
Hallo zusammen,
ich habe viele Texte, wo der Sendernamen z. B. so "BR" oder auch so"BR25" angegeben ist. Da diese Texte aber unterschiedlich durcheinander gewürfelt sind, müsste ich je nach dem alle einzeln überprüfen, da ich von den Texten den Filmnamen heraus lösen will. Jetzt meine Bitte ob es nicht möglich wäre, mit einer Formel dieses möglich zu machen?
Ich habe mal eine Beispieldatei mit hoch geladen und ich glaube da kann man schon erkennen, wie ich das gemeint habe. Dieses Problem mit einer Formel zu lösen, wäre schön und dazu bräuchte ich wieder mal die Hilfe vom Forum.
Vielen Dank schon einmal im voraus.
Viele Grüße Elfriede
https://www.herber.de/bbs/user/155367.xlsm

23
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
hierfür stimmts
25.09.2022 14:46:56
wf
Hi,
=WENN(ISTZAHL(LINKS(TEIL(B4;FINDEN("BR";B4)+2;99))*1);TEIL(B4;FINDEN("BR";B4)+5;99);TEIL(B4; FINDEN("BR";B4)+2;99))
runterkopieren
BR1; BR12 ohne Leerzeichen; BR12345 ergibt natürlich Müll.
WF
AW: hierfür stimmts
25.09.2022 15:57:33
El.
Hallo WF,
zuerst Danke für Deine Formel. Habe sie ausprobiert und dabei kam natürlich das Problem zu Tage, dass nicht alle Filmnamen komplett angezeigt werden. Es gibt Probleme mit einer Situation, wo ein Buchstabe fehlt wenn der Sender nur z. B. "BR7" eine Zahl hat. Kann man das irgendwie korrigieren? (Du hast es ja schon angedeutet, dass das "Müll" gibt).
Vielen Dank schon einmal im voraus.
Viele Grüße Elfriede
Anzeige
AW: Text Extrahierung-
25.09.2022 14:58:57
HeritzP
Hallo,
=TEIL(B4;MAX((ISTZAHL((TEIL(B4;SPALTE(A1:ZZ1);1)*1)))*SPALTE(A1:ZZ1))+2;99)
als Matrixformel bei Bedarf.
AW: Text Extrahierung-
25.09.2022 19:11:33
El.
Hallo HeritzP,
zuerst mal zwar verspätet aber trotzdem Danke für Deine Formel. Auch sie funktioniert wie die von "WF". Sobald der Suchbegriff weniger Stellen hat, wird der String aber nicht vollständig ausgegeben.
Mo 02.08.2021 02:50–03:35 BR21 Sommer am Ebenreuther See / Sommer am Ebenreuther See (richtig)
So 01.08.2021 19:15–20:00 BR21Sommer am Ebenreuther See NEU / ommer am Ebenreuther See NEU (falsch)
bei diesem Beispiel:
Mo 14.06.2021 02:15–03:00 BR Fernsehen11Zwei Wirtshäuser im Unterallgäu / wei Wirtshäuser im Unterallgäu (falsch)
So 13.06.2021 19:15–20:00 BR FernsehenZwei Wirtshäuser im Unterallgäu / BR FernsehenZwei Wirtshäuser im Unterallgäu (falsch)
Vielen Dank schon einmal im voraus.
Viele Grüße Elfriede
Anzeige
AW: Text Extrahierung-
26.09.2022 10:19:48
ChrisL
Hi
Nicht jeder mag RegEx (=kryptisch), aber da sich die Muster verändern (neue Variationen kommen hinzu), scheint es mir eine flexible Variante um bei Bedarf reagieren zu können.
Folgender Code in ein Standardmodul kopieren:

Public Function MyRegEx(str As String, muster As String) As String
Dim RegEx As Object, MyString As String, Funde As Object, Fund As Object
Set RegEx = CreateObject("VBScript.RegExp")
RegEx.Pattern = muster
RegEx.MultiLine = True
RegEx.Global = False
RegEx.IgnoreCase = False
Set Funde = RegEx.Execute(str)
For Each Fund In Funde
MyRegEx = Fund.Value
Exit For
Next Fund
End Function
Anschliessend folgende Formel anwenden:

=WECHSELN(RECHTS(B4;LÄNGE(B4)-26);myregex(B4;"(BR Fernsehen|BRFernsehen|BR)(\d+)? ?");"")
Die ersten 26 Zeichen (fix) werden abgeschnitten. Anschliessend wird mit der benutzerdefinierten Funktion "myregex" der Suchtext ermittelt. Diesen Text wird dann mittels WECHSELN aus dem Resultat gelöscht.
Der RegEx-Zauber findet mittels Definition eines Pattern/Musters statt:
"(BR Fernsehen|BRFernsehen|BR)(\d+)? ?"
bedeutet:
Entweder "BR Fernsehen"
oder "BRFernsehen"
oder nur "BR"
optional gefolgt auf eine oder mehrere Ziffern
optional gefolgt auf einen Leerschlag
| = oder
\d = Digit (Ziffer)
+ = ein oder mehrere Digits
? = optional
cu
Chris
Anzeige
AW: Text Extrahierung-
26.09.2022 12:26:33
El.
Hallo Chris,
zuerst mal Danke für Deine Formel bzw. Makro. Sie funktioniert wie die "Eierlegende WollMilchSau". Ich habe ja beim Ausprobieren ja noch mehrere Situationen vorgefunden, wo der Sender nach einer Ziffer noch einen Punkt dahinter hatte (siehe "So 24.10.2004 19:00–19:45 BR1. Von Anglern und Drachentötern"). Wie muss ich das dann eingeben? Habe "BR1." schon eingefügt, aber der Punkt wird trotzdem vorangestellt.
Bei "So 12.12.2021 11:25–12:15 ORF III (Österreich)Krippenzeit im Salzkammergut" wird der komplette Sendernamen mit ausgegeben. Gibt es dafür eine Lösung?
Vielen Dank schon einmal im voraus.
Viele Grüße Elfriede
Anzeige
AW: Text Extrahierung-
26.09.2022 12:50:13
ChrisL
Hi
Füge in die Formel mal den folgenden Pattern ein:

"(BR Fernsehen|BRFernsehen|BR|ORF I+)(\d+)?\.? ?"
cu
Chris
AW: Text Extrahierung-
26.09.2022 13:22:41
El.
Hallo Chris,
wenn ich Deine Vorlage einfüge, bringt er mir die Fehlermeldung "Die Syntax dieses Namens ist nicht richtig".
Viele Grüße Elfriede
AW: Text Extrahierung-
26.09.2022 13:50:37
ChrisL
Hi
Hier nochmal die ganze Formel:

=WECHSELN(RECHTS(B4;LÄNGE(B4)-26);myregex(B4;"(BR Fernsehen|BRFernsehen|BR|ORF I+)(\d+)?\.? ?");"") 
cu
Chris
AW: Text Extrahierung-
26.09.2022 14:03:56
El.
Hallo Chris,
die Fehlermeldung ist weg, das mit dem "Punkt" ist auch erledigt. Jetzt wäre nur noch das mit "ORF III (Österreich)" übrig. Da wird weiterhin "(Österreich)" voran gesetzt.
Viele Grüße Elfriede
Anzeige
AW: Text Extrahierung-
26.09.2022 14:39:38
ChrisL
Hi
=WECHSELN(RECHTS(B4;LÄNGE(B4)-26);myregex(B4;"(BR Fernsehen|BRFernsehen|BR|ORF I+)(\d+)?\.? ?(\(.+\) ?)?");"")
Damit wird die Klammer ganz generell weggeputzt (egal was zwischen den Klammern steht), wenn sie auf einen Sender folgt und nach der Klammer kann optional ein Leerzeichen stehen.
cu
Chris
AW: Text Extrahierung-
26.09.2022 15:16:35
El.
Hallo Chris,
alles ist zufriedenstellend erledigt. Besser kann man es gar nicht machen und aus diesem Grunde hast Du ein großes Lob verdient. Deshalb nochmals vielen Dank.
Viele Grüße Elfriede
AW: Text Extrahierung-
26.09.2022 15:29:11
ChrisL
Hi
Danke für die Rückmeldung. Freut mich.
Auch die anderen haben gute Ansätze geliefert z.B. hat sich Piet ebenfalls viel Mühe gegeben und seine Lösung ist flexibel in Bezug auf Variationen, aber zudem auch leicht erweiterbar bei neuen Sendern. Die zweite Bedingung ist bei mir nämlich nicht ganz gegeben (ein paar zusätzliche Sender sind OK, aber irgendwann sprengt der Pattern den Rahmen).
cu
Chris
Anzeige
AW: Text Extrahierung-
26.09.2022 13:51:38
Piet
Hallo
ich war bis jetzt nicht am Thread beteiligt, und biete eine Teil-Makro Lösung an. Die Formlen für die Zeiten können bestehen bleiben, die funktionieren ja gut!
Das Makro hat im Modul1 eine Senderliste mit "Br, Orf" und kann auf beliebig viele Sender erweitert werden. Die Zahlen oder "I" bei ORF werden abgeschnitten!
Im Makro kann man überflüssige Text wie "(Österreich)" oder "(Bayern)" usw. zusätzlich löschen. Im Augenblick sind nur diese beiden vorgesehen. Erweiterbar!
https://www.herber.de/bbs/user/155380.xlsm
Bitte mal testen wie es damit klappt, würde mich freuen wenn es hinhaut.
mfg Piet
Anzeige
AW: Text Extrahierung-
26.09.2022 14:01:05
Piet
Nachtrag
wenn du BR Fernsehen noch oder ähnliche Text ausfiltern willst setze in die Replace Zeile noch diesen Befehl ein:
Txt = Trim(Replace(Txt, "Fernsehen", ""))
mfg Piet
AW: Text Extrahierung-
26.09.2022 16:28:48
El.
Hallo Piet,
zuerst mal Danke für Dein Makro. Chris hat mir ja bereits ein Super-Makro abgeliefert, mit dem ich so ziemlich alles abdecken kann. Er hat mir aber auch zum Schluss dazu geraten, mal Dein Makro zu testen, falls es doch mal zu Änderungen kommen sollte. (Dein Makro wäre für den Fall flexibler). Ich habe Dein Makro jetzt auch getestet, mit den Daten Deiner Beispieldatei. Hat auch alles funktioniert!!!
Nachdem ich aber einige andere Daten ausprobiert hatte, wurden bei allen Daten wo z. B. nach Fernsehen eine Zahl hatten "BR Fernsehen13 Die Goldschlägerei in Schwabach etc." die Zahlen mit aufgeführt ("Ausgabe = 13 Die Goldschlägerei in Schwabach", was er ja bei der "Beispieldatei" nicht getan hatte. Dort waren auch die Sendernamen nur überwiegend ("BR24" etc.) vierstellig groß.
Vielen Dank mal und bis später
Viele Grüße Elfriede
Anzeige
AW: Text Extrahierung-
26.09.2022 17:12:06
Piet
Hallo Elfriede
Danke das du mein Makro getestet hast, freut mich.
Der Vorteil bei einem Makro ist, man kann es in Sekunden erweitern. Um den Fehler abzufangen brauchte ich nur wenige Sekunden!
Man erweitere das Makro nach dem Replace noch mal um die For Next Schleife, die vorgestellte Zahlen abschneidet. Das ist Alles!
Schau bitte jetzt mal ob alles zufriedenstellend klappt.
mfg Piet
  • Option Explicit '26.9.2022 Piet für Herber Forum
    Const Senderliste = "BR, ORF, usw" 'Senderliste - beliebig erweiterbar!
    'Sender und Filmname extrahieren
    
    Sub Sender_und_Film_Auswahl()
    Dim AC As Range, lz1 As Long
    Dim Txt As String, i, j, Ary   'Array
    lz1 = Cells(Rows.Count, 2).End(xlUp).Row
    'Schleife zum Text trennen in allen Zeilen
    For Each AC In Range("B2:B" & lz1)
    If AC.Value  Empty Then
    'Zeit Vorpann abschneiden
    Txt = Trim(Mid(AC, 27))
    Ary = Split(Senderliste, ", ")
    'aktiven Sender über Senderliste ausfiltern
    For j = 0 To UBound(Ary)
    If Left(Txt, 2) = Left(Ary(j), 2) Then _
    Txt = Trim(Replace(Txt, Ary(j), "")): Exit For
    Next j
    'vorgestellte Zahlen oder "I" (ORF) abschneiden
    For i = 1 To 4
    If IsNumeric(Left(Txt, 1)) Then Txt = Trim(Mid(Txt, 2))
    If Ary(j) = "ORF" Then If InStr(Left(Txt, 5), "I") Then _
    Txt = Trim(Mid(Txt, 2))
    Next i
    ''' Länder Text in () löschen - beliebig erweiterbar!!
    Txt = Trim(Replace(Txt, "(Österreich)", ""))
    Txt = Trim(Replace(Txt, "(Bayern)", ""))
    'Erweiterung:
    '** vorgestellte Zahlen bei "Fernsehen" abschneiden
    For i = 1 To 4
    If IsNumeric(Left(Txt, 1)) Then Txt = Trim(Mid(Txt, 2))
    Next i
    'Sender und Text als Ergebnis speichern
    AC.Offset(0, 3) = Ary(j)
    AC.Offset(0, 5) = Txt
    End If
    Next AC
    End Sub
    

  • Anzeige
    AW: Text Extrahierung-
    26.09.2022 21:36:05
    El.
    Hallo Piet,
    etwas verspätet melde ich mich mit folgendem Ergebnis. Soweit ist auch alles Super, aber ein Problem habe ich festgestellt, wenn man es überhaupt als solches bezeichnen kann und zwar das mit den Sendern wie "BR1. etc." die eine Zahl mit Punkt angehängt haben. Ich habe diesen Sender "BR1." in die Senderliste eingefügt, (Mo 26.09.2022 02:30–03:15 BR1. Spezialitäten zwischen Bamberg und Forchheim) aber trotzdem wirft er bei der Ausgabe ". Spezialitäten zwischen Bamberg und Forchheim" so aus.
    Gibt es dafür eventuell auch eine Lösung?
    Viele Grüße Elfriede
    AW: Text Extrahierung-
    26.09.2022 23:33:29
    Piet
    Hallo Elfriede
    ändere bitte den letzten Teil des Makros wie folgt ab:
    mfg Piet
  • 'Sender und Text als Ergebnis speichern
    If Left(Txt, 1) = "." Then Txt = Mid(Txt, 2)
    AC.Offset(0, 3) = Ary(j)
    AC.Offset(0, 5) = Trim(Txt)

  • AW: Text Extrahierung-
    27.09.2022 00:14:11
    El.
    Hallo Piet,
    habe den "Teil" jetzt durch Deine geänderten Daten ausgetauscht und siehe da, "kleine Ursache, aber große Wirkung". Es funktioniert alles wie es soll. Einfach gute Arbeit.!!! Eine Frage zum Schluss wäre noch folgende: Sollten wider erwartend mal Sender mit anderen Bezeichnungen wie der Punkt auftauchen, wie bzw. wo kann ich da die Änderungen eintragen? (Sendernamen in die Senderliste ist ja klar).Bitte um kurze Info!
    Viele Grüße Elfriede
    AW: Text Extrahierung-
    26.09.2022 12:53:34
    Daniel
    Hi
    ich vermute mal, dass du für dieses Aufgabe keine allgemeingültige Lösung finden wirst, da die Sendernamen und auch die Schreibweisen (direkt angehängt oder mit Leerzeichen) viel zu vielfältig sind um eine eindeutige Regel abzuleiten, an der man erkennen kann, wo der Sender aufhört und der Titel anfängt.
    Da die Anzahl der Sender aber begrenzt sein dürfte, würde ich folgende Lösung vorschlagen:
    1. du listest in einer freien Spalte alle möglichen Sendernamen auf (für die Formel G1:G5)
    2. verwende dann diese Formel, um den Titel zu extrahieren:
    
    =GLÄTTEN(TEIL(B4;27+AGGREGAT(14;6;LÄNGE($G$1:$G$6)/(FINDEN(" "&$G$1:$G$6;B4)=26);1);99))
    
    sollte ein neuer Sender auftauchen, der in Spalte G nicht gelistet ist, so zeigt die Formel den #Zahl!-Fehler und du kannst die betroffenen Sender leicht finden und ergänzen.
    Gruß Daniel
    AW: Text Extrahierung-
    26.09.2022 14:15:50
    El.
    Hallo Daniel,
    Danke für Deine Formel, habe es mal ausprobiert. Aber der Aufwand ist hierbei sehr groß, weil es je nach dem bis zu 50 Möglichkeiten von nur einem Sender geben kann.
    Du hast es ja schon angedeutet, dass es für diese Aufgabe wahrscheinlich keine allgemeingültige Lösung geben wird. Aber Chris ist auf einem guten Weg dazu und es fehlt nimmer viel, für eine endgültige Lösung.
    Trotzdem noch mal vielen Dank
    Viele Grüße Elfriede
    AW: Text Extrahierung-
    26.09.2022 15:44:23
    Daniel
    nun dann sei es so.
    die Frage ist natürlich was für dich weniger aufwendiger ist:
    a) einmalig die möglichen Sender einzutragen
    b) RegEx zu lernen, schließlich solltest du ja verstehen, was du da machst und möglichst selber erstellen können, ohne jedesmal auf das Forum zurück greifen zu müssen.
    Gruß Daniel

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige