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.

String aus Text rausfiltern mit mehreren Kriterien
#1
Hi,

ich würde gerne Text aus einer Zeile extrahieren. Das Problem ist ein wenig komplexer und ich habe keine Ahnung, wie ich heran gehen soll.

Der String aus Spalte A sieht bspw. folgendermaßen aus:
AAA222 BBBB CDEFG mabcdef116asd XYZABC

Dort suche ich nun den String "mabcdef116asd", der nach folgenden Kriterien gesucht werden muss:

1. Er steht nicht innerhalb der ersten 6 Charaktere
2. Er startet mit einem Buchstaben
3. Innerhalb des Wortes ist mindestens eine Zahl enthalten
4. Das Wort besteht aus mindestens 8 Buchstaben

Kann mir jemand helfen?

Beste Grüße
Antworten Top
#2
Hallöchen,

einfach mit "FINDEN" ?
Arbeitsblatt mit dem Namen 'Tabelle1'
 AB
1AAA222 BBBB CDEFG mabcdef116asd XYZABC19

ZelleFormel
B1=FINDEN("mabcdef116asd";A1)
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#3
Hallo,

füge in ein allgemeines VBA-Modul diesen Code ein:
Public Function F_EXTRAKT(rngText As Range) As String
 Dim i As Long
 Dim strText As String
 Dim varText As Variant
 strText = rngText.Value
 varText = Split(Mid(strText, 7), " ")
 For i = 0 To UBound(varText)
   If Len(varText(i)) > 7 Then
     If Not IsNumeric(Left(varText(i), 1)) Then
       If varText(i) Like "*#*" Then
         F_EXTRAKT = varText(i)
         Exit For
       End If
     End If
   End If
 Next i
End Function

Diese Funktion benutzt Du dann wie eine Excelfunktion:

AB
1AAA222 BBBBB CDEFG mabcdef116asd XYZABCmabcdef116asd
Formeln der Tabelle
ZelleFormel
B1=F_EXTRAKT(A1)

Gruß Uwe
Antworten Top
#4
Wenn solche Operationen automatisiert werden sollen, Makaveli,
muss der Primärtext in strukturierter Form vorliegen, d.h., man muss Textblöcke bilden können. Das ist bei deinem Bsp möglich. Wenn das immer so ist, wobei es nicht unbedingt Leer-, aber wenigstens Sonderzeichen sein sollten, die die Blöcke verbinden (zumindest den relevanten Textteil umschließen!), ist das auch per Formel möglich, wie es ja auch Uwe demonstriert hat. Wenn man nun alle deine Bedingungen berücksichtigen wollte, sollte das Textbsp eher so aussehen:
AAA222 BBBB 8CDE44FG mabcdef116asd XYZABCDEF
Damit käme Uwes spezielle UDF gut zurecht und ebenfalls mit anderen Varianten und auch, falls die Bedingungen nicht erfüllt sind. Allerdings müssen die Textblöcke dann auch wirklich stets mit Leerzeichen verbunden werden!
Mit allgemeineren UDFs würde die Formel deutlich länger werden, nur mit Standard-Xl-Funktionen wahrscheinlich gigantisch. Ich habe das mal mit ersteren und diversen Sonderzeichen als Blockverbinder für folgende Primärtexte versucht:
AAA222,BBBB|8CDE44FG:mabcdef116asd-XYZABCDEF
AAABBB,CCCdddEEE|8CDE44FG:lmn1opq2rst3uvw4xyz-ABCDEFghijkl
AABBB CDE44FG0 1opq2rst3uvw4xyz - ABCDEFghijkl
Dabei kam folgende 1zellige (singulare) Matrixformel zum Einsatz:
{=GLÄTTEN(VJoin(WENN((normVTextLg>7)*ISTFEHLER(--LINKS(normVText))*MMULT(1^SPALTE($A1:$J1);--(LÄNGE(korrVText)<normVTextLg));normVText;"")))}
Damit diese übersichtlich bleibt, wurden sich wiederholende Teilformeln in benannte Formeln (Namen definieren!) ausgelagert:
für normVTextLg: =LÄNGE(normVText)
für normVText: =VSplit(MaskOn(ERSETZEN($A2;1;6;"");"anu"))
für korrVText: =WECHSELN(normVText;ZEILE(A$1:A$10)-1;"")
Der normVText wird folglich so gebildet, dass erst die ersten 6 Zeichen entfernt und dann alle Sonderzeichen (auch mehrere hintereinander)  durch ein Leerzeichen ersetzt werden. Ist der relevante Textteil aber stets von Leerzeichen eingeschlossen, kann die UDF MaskOn entfallen (um Uwes UDF zu testen, habe ich übrigens zuvor MaskOn auf die gezeigten Primärtexte angewendet, allerdings in einer separaten Zelle, weil seine UDF unnötigerweise an 2 Stellen* auf Zellbereiche als Quelle festgelegt ist).
Für den korrVText werden alle Ziffern im normVText entfernt, um so aus der Längendifferenz zwischen beiden Texten auf Relevanz schließen zu können.
Alles Weitere erklärt sich aus den verwendeten Funktionen und der Hauptformel.
Die UDFs MaskOn (2.Posting von 2014!) und VSplit (Version1.1 oder eine Trivial-UDF wie Splitt oder ähnliche wie Trennen ist hier wohl ausreichend) sind im Herber-Archiv enthalten (www.herber.de/forum → Kopf-Button RECHERCHE, 1.Editierzeile für Stichworteingabe verwenden).
* Im UDF-Kopf muss As Range und in Programmzeile 5 .Value entfallen, wenn die UDF auch mit direkter oder per Teilformel (Ausdruck) erzeugter Textangabe zurecht kommen soll.
Gruß, Castor
Antworten Top
#5
Hallo

ich sehe viele Antworten, vor allem ein sehr umfanreiche von Castor. Sie zeugen von hohem fachlichen Wissen des Ratgeber. Bekomme ich als Frager solche Antwortenzu lesen streuben sich mir auf Grund eigener Unwissenheit alle Nachenhaare hoch und ich habe nur noch ein Bedürfniss, die Datei ganz schnell schliessen und sie nie wieder ansehen!!!  Ist ein rein psychologischer Effekt, den ich bei mir selbst immer weider beobachten kann.

Zitat:Dort suche ich nun den String "mabcdef116asd"
höfliche Frage:   ein einfacher Suchlauf reicht doch!!  Kann ich auch in VBA programmieren. Und wenn zu erwarten ist das dieser Stringteil mnehrfach vorkommen mit einer Do Loop Schleife alles durchsuchen. Auf die schnelle reicht ein normaler Such Dialog!

mfg  Gast
Antworten Top
#6
Hi Gast,

Zitat:höfliche Frage:   ein einfacher Suchlauf reicht doch!!


ich denke in diesem Fall nicht. Das sind die Vorgaben des Fragestellers:

Zitat:Dort suche ich nun den String "mabcdef116asd", der nach folgenden Kriterien gesucht werden muss:

1. Er steht nicht innerhalb der ersten 6 Charaktere
2. Er startet mit einem Buchstaben
3. Innerhalb des Wortes ist mindestens eine Zahl enthalten
4. Das Wort besteht aus mindestens 8 Buchstaben
Gruß Günter
Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen.
angebl. von Georg Christoph Lichtenberg (1742-1799)
Antworten Top
#7
Hi   ich bin überrascht vom Moderator Antwort zu erhalten, Dankeschön!

Zitat:AAA222 BBBB CDEFG mabcdef116asd XYZABC
vielleicht irre ich mich, ich ging lediglich auf die Struktur des Beispiel Strings ein. Weiss aber nicht ob sie so stimmt? Ob es zwischen den einzelnen Blöcken Space gibt oder nicht?? Ansonsten würde ich z.B. per VBA den String zerlegen und gezielt die gestellten Forderungen auswerten. Die ersten 6 Stellen abschneiden, 1. Stelle auf Zahl oder Buchstabe auswerten, usw. Ich gebe aber zu das ich versuche mir möglichst wenig Arbeit zu machen.

mfg Gast 123
Antworten Top
#8
Hi,

sofern ich die Frage richtig verstanden habe, dürfte der String unterschiedliche Längen mit unterschiedlichen Blöcken und innerhalb diesen auch unterschiedliche Inhalte (Buchstaben und Ziffern) haben. Das schließe ich daraus, dass makaveli ganz explizit auf die möglichen Zeichenfolgen und Mindestlängen eingegangen ist. Ich hatte für mich am Freitag schon mal eine ganze Weile probiert, das Problem mit Formeln anzugehen, kam aber auf keinen grünen Zweig. Hier, denke ich, wird wohl ein Makro die erste Wahl sein. Uwe hat ja schon mal was kreiert.

Ob meine Einschätzung stimmt, wird der TE uns hoffentlich bald mitteilen.
Gruß Günter
Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen.
angebl. von Georg Christoph Lichtenberg (1742-1799)
Antworten Top
#9
Du hast recht, WillWissen,
und ich sehe das genauso! Außerdem hatte ich bereits erwähnt, dass Uwes spezielle UDF stets zum gleichen Ergebnis kommt wie meine Formel, wenn entweder die Blocktrenner Leerzeichen sind oder die UDF so geändert wird, dass auch (im UDF-Argument korrigierte) Texte verarbeitet werden können.
Ist das alles nicht der Fall und der gesuchte Text kann auch mal ohne identifizierbare Trenner im Text stehen, wird's bei der Variationsbreite des gesuchten Textes wohl nahezu unmöglich sein, das zu automatisieren.
Sowohl André als auch der 123.Gast haben da wohl etwas zu kurz und an der eigentlichen Aufgabe vorbei gedacht. Immer den gleichen Text aus einem Gesamttext zu isolieren, wäre ja auch sinnlos, da der dann ja ohnehin schon vorliegt. Dann käme es ja nur auf Vorhanden oder nicht an. Das wäre aber eine ganz andere Aufgabenstellung! ;)
Übrigens habe ich die UDF-Formellösung auch mit dem Hintergedanken entwickelt, die einzelnen, mit den Anforderungen korrespondierenden Schritte sichtbarer zu machen. Das könnte dann auch der Ansatz für eine Standard-Formellösung sein, man müsste „nur“ VSplit (und ggf MaskOn) durch ein Standard-Funktions-Formelkonstrukt ersetzen.
Gruß, Castor
Antworten Top
#10
Hallo,

euch ist aber hoffentlich bewußt, dass die Aufgabenstellung darauf hindeutet, dass Passwörter aus einem Text extrahiert werden sollen?
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top


Gehe zu:


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