Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
872to876
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
872to876
872to876
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Teilstring extrahieren

Teilstring extrahieren
29.05.2007 15:34:40
Bertram
Hallo zusammen,
ich denke wahrscheinlich schon wieder zu kompliziert. Ich habe einen 40-stelligen String. Ich benötige daraus die Buchstabenkombination der Materialbezeichnung. Diese befindet sich am Anfang des Strings. Die gesamte Materialbezeichnung ist 7 Zeichen lang, ab dem 8.Zeichen kommen immer Zahlen.
Bevor ich hier alle Möglichkeiten erkläre, schaut euch mal die Bsp.-Mappe an. Spalte A sind die Strings, Spalte B das gewünschte Ergebnis.
https://www.herber.de/bbs/user/42837.xls
Frage: Gibt's da auch ne einfachere Formel?
Hintergrund: Es sind mehrere zig-tausend Zeilen und die Matrixformel pumpt die Datei ziemlich auf.
Danke für Tips.
Gruß
Bertram

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Teilstring extrahieren
29.05.2007 15:49:36
c0bRa
Hio...
Du könntest dir eine benutzerdefinierte Funktion basteln à la:
Modul Modul1:
Option Explicit
Public Function material(ByVal s As String) As String
    Dim objRegEx As Object
    Set objRegEx = CreateObject("VBscript.regexp")
    With objRegEx
        .IgnoreCase = True
        .Global = True
        .MultiLine = True
        .Pattern = "(.*?)\d.*"
    End With
    material = objRegEx.replace(s, "$1")
    Set objRegEx = Nothing
End Function
Danach reicht ein =MATERIAL(A1) als Formel
Rückmeldung nicht vergessen...
c0bRa
Perl ist die einzige Sprache, die vor und nach einer RSA-Verschlüsselung gleich aussieht.

Anzeige
AW: Teilstring extrahieren
29.05.2007 16:29:00
Bertram
Hallo c0bRa,
danke erstmal. Leider sagt mir das Objekt 'VBscript.regexp' bisher gar nix und demzufolge auch der Rest recht wenig. Werde wohl mal googeln müssen:-)
Funktioniert auch nicht ganz perfekt, da die Bindestriche übrigbleiben. Da ich wie gesagt von selbigem Objekt (bisher) keine Ahnung habe, krieg ich die momentan auch noch nicht weg.
Nochmals Danke und Gruß
Bertram

AW: Teilstring extrahieren
29.05.2007 16:33:00
c0bRa
Hio nochmal...
Den Bindestrichen solltest du so zu Leibe rücken können
material = replace(objRegEx.replace(s, "$1"),"-","")
Rückmeldung nicht vergessen...
c0bRa
Perl ist die einzige Sprache, die vor und nach einer RSA-Verschlüsselung gleich aussieht.

Anzeige
AW: Teilstring extrahieren
29.05.2007 16:41:12
Bertram
Hallo c0bRa,
danke nochmal, ich versteh's zwar immer noch nicht:-), aber jetzt funktioniert's einwandfrei. Aber wie schon Thorsten gesagt, ich brauch leider ne Formellösung. Ansonsten: Respekt.
Gruß
Bertram

AW: Teilstring extrahieren
30.05.2007 15:58:00
Bertram
Hallo c0bRa oder auch jeder andere,
kannst du mir nochmals helfen?
Nach einiger Recherche versteh ich zwar die Pattern-Property des Objekts einigermaßen, aber das "$1" in der Replace-Methode kapier ich nicht. Hab zwar schon einiges rumgespielt (auch mit dem Pattern), komme da aber auch keinen grünen Zweig. Mir ist zwar klar, dass je nach Pattern, ein Teil des Strings durch $1 ersetzt wird, aber warum es in dem Fall dann gar nicht mehr auftaucht (was ja so sein soll) ist mir nicht klar.
Gruß
Bertram

Anzeige
AW: Teilstring extrahieren
30.05.2007 16:38:29
c0bRa
Hio...
das $1 bezieht sich auf das erste Klammernpaar. also hier auf (.*?). das \d beschreibt eine Zahl, ist aber außerhalb des Klammernpaares, wird also nicht mehr mit übergeben. Somit nimmt er nur das, was vor der Zahl steht. Das Spiel kann man beliebig fortführen.
Nehmen wir mal =Tabelle1!A1
und den Pattern: =(.*?)\!([A-Z]{1,2}\d{1,5})
$1 wäre nun: Tabelle1
und $2 wäre A1
im pattern selbst kannst du auch rückreferenzieren
z.b.: (\d*)A\1 prüft, ob nach einem A das gleiche steht, wie vor dem A, jedoch ist hier der \ und nicht das $ zu verwenden.
Auf den String 123A123, würde es 123A123 zurückgeben.
Auf den String 123A231 hingegen, würde es 23A23 zurückgeben.
Rückmeldung nicht vergessen...
c0bRa
Perl ist die einzige Sprache, die vor und nach einer RSA-Verschlüsselung gleich aussieht.

Anzeige
AW: Teilstring extrahieren
30.05.2007 17:13:43
Bertram
Hallo c0bRa,
so langsam dämmert's. Werd mal noch ein paar Bsp. ausprobieren. Den Teil mit dem Pattern rückreferenzieren (2. Bsp von dir) hab ich aber noch nicht kapiert:-( Wenn du mir das nochmal für Langsamdenker erklären könntest.
Danke für die bisherige Hilfe und im voraus.
Gruß
Bertram

AW: Teilstring extrahieren
31.05.2007 09:41:41
c0bRa
OK...
Kannst du in Grundzügen HTML? <b> Schreibt ja Fett und <i> kursiv. Dazu müsste ein Tag geöffnet werden und auch wieder geschlossen. mit \&lt(b|i)\>(.*?)\&lt\/\1\> würde er nun in $1 b oder i schreiben. $2 ist das, was zwischen dem Tag steht. und das \1 referenziert zurück auf das $1. also wird das eingesetzt, was in $1 gefunden wurde. Entweder das b oder das i
Somit findest du: <b>Hallo Welt!</b> oder <i>Hallo Welt!</i>
aber nicht <b>Hallo Welt!</i>
Rückmeldung nicht vergessen...
Kann sein, dass ich ein paar Backslashes zuviel drin hab, aber bei so Sonderzeichen mache ich leiber einen zuviel als einen zu wenig :)
c0bRa
Perl ist die einzige Sprache, die vor und nach einer RSA-Verschlüsselung gleich aussieht.

Anzeige
AW: Teilstring extrahieren
31.05.2007 09:54:24
Bertram
Hallo nochmal,
leider bin ich HTML-unterbelichtet:-( Deine Erklärung ist aber recht gut. Werde mal an einigen Beispielen rumprobieren, aber für meine Zwecke hab ich's jetzt soweit verstanden (hoffe ich).
Vielen Dank nochmals.
Gruß
Bertram

AW: Teilstring extrahieren
29.05.2007 15:59:00
Christian
Hallo Bertram,
falls nur Bindestrich oder 0 nach der Buchstabenkombination kommen, dann evtl. so:
=LINKS(A2;WENN(ISTFEHLER(FINDEN(0;A2;1));FINDEN(ZEICHEN(45);A2;1)-1;FINDEN(0;A2;1)-1))
MfG Christian

AW: Teilstring extrahieren
29.05.2007 16:36:00
Bertram
Hallo Christian,
danke für deinen Vorschlag, aber wie du schon sagst, es funktioniert nur, wenn ne 0 folgt. Leider können es alle Zahlen von 0-9 sein.
Gruß
Bertram

Anzeige
AW: Teilstring extrahieren
29.05.2007 16:12:00
Oberschlumpf
Hi Bertram
Oder versuch es mit dieser VBA-Idee:
(auch im allg. Modul)

Sub StrTeil()
Dim loZeile As Long, liChar As Integer, lstrTeil As String
For loZeile = 2 To Cells(Rows.Count, 1).End(xlUp).Row
For liChar = 1 To 7
If Asc(UCase(Mid(Range("A" & loZeile).Value, liChar, 1))) >= 65 And _
Asc(UCase(Mid(Range("A" & loZeile).Value, liChar, 1))) 


Dieser Code zeigt in Spalte B nur die X - ohne Zahlen, ohne Bindestriche.
Konnte ich helfen?
Ciao
Thorsten

AW: Teilstring extrahieren
29.05.2007 16:33:00
Bertram
Hallo Thorsten,
danke dir für den Code, aber ich brauche leider eine Formellösung (so hatte ich es zuerst auch, zumindest so ähnlich:-)
Zum Trost: Dein Code funktioniert einwandfrei:-)
Gruß
Bertram

Anzeige
AW: Teilstring extrahieren
29.05.2007 17:09:00
mpb
Hallo Bertram,
versuche mal die Matrixformel
=LINKS(A2;7-SUMME((TEIL(WECHSELN(LINKS(A2;7);"-";"0");SPALTE(1:1);1)={"0";"1";"2";"3";"4";"5";"6"; "7";"8";"9"})*1))
Ob das performanter ist, müsstest Du testen.
Ich bin übrigens davon ausgegangen, dass von den ersten 7 Zeichen alle ausgelesen werden sollen die nicht Ziffern oder "-" sind.
Gruß
Martin

AW: Teilstring extrahieren
29.05.2007 17:21:10
Bertram
Hallo Martin,
danke dir für deine Lösung. Funktioniert wie gewünscht. Werde mal sehen, ob sie besser performt als meine. Deine Formel ist zumindest mal um einiges kürzer als mein Konstrukt:-)
Gruß
Bertram

Anzeige
AW: Teilstring extrahieren
29.05.2007 17:41:09
mpb
Hallo Bertram,
zum weiteren Testen noch eine Alternative:
=LINKS(A2;7-SUMME((TEIL(LINKS(A2;7);SPALTE(1:1);1)={"0";"1";"2";"3";"4";"5";"6";"7";"8";"9";"-"})*1))
Gruß
Martin

AW: Teilstring extrahieren
29.05.2007 17:45:50
HermannZ
Hallo Martin;
noch ne möglichkeit;
{=WECHSELN(LINKS(A215;VERGLEICH(1;--ISTZAHL(TEIL(A215;SPALTE($1:$1);1)-1);0)-1);"-";"")}
Gruss hermannZ

AW: Teilstring extrahieren
29.05.2007 18:09:00
Bertram
Hallo Martin und HermannZ,
danke nochmals euch beiden, funktioniert alles bestens. Jetzt hab ich ja Auswahl:-) Mein anfängliches Statement stimmt also: Ich denke zu kompliziert:-)
Gruß
Bertram

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige