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

Wortteil finden, Zahlen aus Wortteil zurück geben

Wortteil finden, Zahlen aus Wortteil zurück geben
24.04.2019 17:10:22
Curly
Hallo zusammen,
ich habe mir eine Formel gebastet um einen Wortteil ("ANZ") in einer Zelle zu finden und die Angehängten Zahlen zurück zugeben.
Nun ist meine Frage, ob es einen einfachen Weg bzw. bessere Formel gibt.
Falls es ein Unterschied macht, die Formel geht über 30.000 Zeilen.
Meine Formel:

=WENN(ISTZAHL(FINDEN("ANZ";A2));TEIL(A2;FINDEN("ANZ";A2)+3;
WENNFEHLER(FINDEN(" ";A2;FINDEN("ANZ";A2));LÄNGE(A2))-FINDEN("ANZ";A2)-2);"")
Meine Beispieldatei:
https://www.herber.de/bbs/user/129369.xlsx
Die Kriterien:
- Die Zahl an "ANZ" kann 1-3 Ziffern enthalten
- "ANZ"+Zahl kann alleine in Zelle stellen
- "ANZ"+Zahl kann am Anfang stehen, danach Text
- "ANZ"+Zahl könnte Zwischen Text stehen oder am Ende
Danke u. Gruß
Curly

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: RegEx "ANZ\d+"
24.04.2019 17:14:37
Fennek
Hallo,
wenn VBA infrage kommt, ginge es mit RegEx und dem gezeigten Pattern.
mfg
AW: RegEx "ANZ\d+"
24.04.2019 17:21:18
Curly
Hallo Fennek,
ja VBA geht auch mit RegEx hab ich noch nicht viel gemacht, aber ich such mir mal Beispiele und schau, ob ich das umsetzen kann :-)
Danke
AW: RegEx "ANZ\d+"
24.04.2019 18:07:21
Curly
Nochmal Hallo,
hat zwar etwas gedauert, aber nun habe ich es semiprofessionell über RegEx hinbekommen :-)
Ich denke jeder Fachmann schlägt die Hände über dem Kopf zusammen ...
Hier mal meine Lösung:
Function RegExANZ(str As String) As String
Dim RegEx As Object
Dim Treffer As Object
Dim Ergebnis As String
Set RegEx = CreateObject("VBScript.RegExp")
On Error Resume Next
With RegEx
.Pattern = "ANZ\d+"
.Global = False 'Nur erstes Ergbnis gematcht
.IgnoreCase = False 'Keine Unterscheidung Klein und Groß
.MultiLine = True 'Zeilenumbrüche als eigener Ausdruck
End With
Set Treffer = RegEx.Execute(str)
If Treffer.Count  0 Then
Ergebnis = Replace(Treffer.Item(0), "ANZ", "")
End If
RegExANZ = Ergebnis
End Function
Kannst du mir zeigen, wie die Lösung professionell aussieht?
Danke Curly
Anzeige
AW: Gut! Array?
24.04.2019 18:33:21
Fennek
Hallo,
ohne es getestet zu haben: das sieht gut aus!
Soll wirklich nur der erste Treffer in einer Zelle gezeigt werden?
Bei 30.000 Zeilen kann das relativ lange dauern. Falls mehr "speed" gewünscht ist, kann man den ganzen Bereich zuerst in ein Array (Ar = Activesheet.usedrange.columns(1)) übertragen und RegEx dort nutzen.
mfg
AW: Gut! Array?
24.04.2019 19:00:51
Curly
Geschwindigkeit ist immer gut, allerdings habe ich das auch noch nicht gemacht mit einem Array,ich glaube das übersteigt dann doch meinen Kenntnisstand.
Ich hätte das jetzt Beipsielhaft als Formel (s.u.) in die Spalte G bis zur letzten Zeile einfügen lassen , danach berechnet , dann kopiert und als feste Werte eingefügt.

Range("G2:G" & LastRow).FormulaR1C1 = "=RegExANZ(RC[-6])"

Wenn du mir aber einen schnelleren Weg zeigen könntest bin ich auch nicht abgeneigt. :-)
Danke Curly
Anzeige
AW: Gut! Array?
24.04.2019 19:12:36
Curly
Soll wirklich nur der erste Treffer in einer Zelle gezeigt werden?
Es gibt immer pro Zelle (in Spalte A) 0 bzw max 1 Treffer
AW: RegEx "ANZ\d+"
24.04.2019 18:37:34
Günther
Moin,
ich vertrete die etwas "exotische" Meinung, dass "professionell" ein Ansatz ist, der nicht wirklich weiterführend ist. Wichtig ist imho, dass du die/eine in allen Lagen zu 100% funktionierende Lösung verstehst, das Ziel stets erreicht wird und die Geschwindigkeit stimmt. - Wobei das Streben nach Optimierung stets positiv ist!
Je nach Excel-Version und der "Wahrhaftigkeit der Daten in der Muster-xlsx kannst du das mit wenigen oder etwas mehr Mausklicks, ohne oder mit Formel lösen.
Gruß
Günther
Anzeige
..sprich es aus Günther-Power Query.. :-) owT
24.04.2019 18:59:01
robert
AW: ..sprich es aus Günther-Power Query.. :-) owT
24.04.2019 19:07:12
Günther
Ja klar ... Ich glaube, dass ich demnächst unter dem Nick "PQG" gehandelt werde. ;-)
Und wenn ich schon dabei bin: Leider ist es mit der Einheitlichkeit innerhalb des PQ jetzt vorbei. Nicht nur, dass der Aufruf in 2010/13 vs 2016, ff unterschiedlich ist, in 2019/365 sind einige Funktionen (auch Sprache M) und Funktionalitäten in dem (der?) GUI drin, die das Leben sehr erleichtern und die Mausklicks auf ein Minimum verringern.
Gruß
Günther
AW: RegEx "ANZ\d+"
24.04.2019 19:08:46
Curly
Hallo Günther,
auf der Arbeit haben wir leider bis Mitte / Ende dieses Jahre noch Excel 2013 ...
Im Forum gibt es zum glück viele Nette und Hilfsbereite Menschen, die wahrscheinlich auch beruflich viel mit Excel zutun haben, das sind in meinen Augen "Profis".
Und da ich immer nach "ordenlich" programmierten Code suche, allerdings auch nur Laie bin übernehme ich natürlich auch viele Fehler aus dem Internet... Und hier bin ich stehts dankbar, wenn mir jemand diese Fehler aufzeigt, bzw zeigt wie man es besser machen könnte.
Anzeige
AW: RegEx "ANZ\d+"
24.04.2019 19:25:47
Günther
OK Curly,
das verstehe ich und rückt deine erste Aussage auch in ein anderes Licht.
Ich möchte meine Aussage aber auch etwas konkretisieren: Mir ist ein Code lieber, der nur messbar langsamer ist und vom "Betreuer" verstanden wird als ein Code, der fremder Hilfe bedarf, wenn eine Änderung vonnöten ist. So als Idee: Wenn jemand in einer Firma eine Lösung mit einer Schleife selbst programmiert hat ist das aus meiner Sicht erheblich effektiver als eine Lösung eines (wirklichen) Profis, wo im Unternehmen so richtig niemand versteht, was da warum und wie abläuft. Insbesondere die Arrays sind ja in VBA einigen Regeln unterworfen, welche bei Programmierern anderer Hochsprachen nur ein Kopfschütteln hervorrufen.
Wenn eure IT einigermaßen offen gegenüber ORIGINAL-Add-Ins von Microsoft ist, dann kannst du das Power Query durchaus installieren und jetzt schon erste Lern-Erfahrung machen. 30.000 Datensätze sind für PQ "ein Lacher", die 10-fache Menge ist zum Warmwerden da und die 100-fache Menge (ja, 3 Mio) kann bei entsprechendem Arbeitsspeicher auch verarbeitet werden. (OK, etwas provokant aber durchaus ein realistischer Hintergrund).
Wie auch immer, Viel Glück bei der Realisierung. Hauptsache ist, es läuft in ertrabbarer Geschwindigkeit.
Gruß
Günther
Anzeige
Array - Evaluate und...
25.04.2019 13:57:56
Case
Hallo Curly, :-)
...wenn du PQ nicht einsetzen kannst/willst/darfst/möchtest/sollst und die Datenmenge bei ca. 30.000 Datensätzen liegt, geht natürlich auch VBA. In der Beispieldatei (32.000 Datensätze) ist ein einfach verständlicher Code (zweimal geschrieben - einmal mit ausreichender Kommentierung). :-)
Beispieldatei...
1. Eingabearray befüllen
2. Ausgabearray dimensionieren
3. Durch Eingabearray schleifen
4. Formel Evaluieren (oder eben anders einschränken) und Ausgabearray betanken
5. Ausgabearray in Spalte daneben schreiben
Einer der netten kleinen Vorteile von "Evaluate" ist der Umstand, dass du funktionierende Formeln auswertest und den daraus resultierenden Wert weiternutzen kannst, ohne die Formel irgendwohin schreiben zu müssen.
Das ist natürlich nur EINE Möglichkeit von Vielen. ;-)
VBA kann den Arbeitsalltag deutlich vereinfachen - man sollte sich ergo mit dieser Materie ruhig auch etwas beschäftigen. ;-)
Servus
Case

Anzeige
Vielen Dank
25.04.2019 17:33:04
Curly
Vielen Dank Case.
läuft einwandfrei :-)
und mit den Hinweisen bin ich wieder ein "bisschen" schlauer geworden
Ich wünsch dir noch einen schönen Tag.
Gruß Curly
AW: Wortteil finden, Zahlen aus Wortteil zurück geben
26.04.2019 13:42:05
Daniel
Hi
diese Auswertung ist nicht sonderlich komplex und sollte deinen Rechner auch bei 30.000 Zeilen nicht ins Schwitzen bringen.
die Formel ließe sich vereinfachen, wenn man davon ausgehen kann, dass es sich um normale Zahlen handelt.
=AGGREGAT(14;6;--TEIL(A4;FINDEN("ANZ";A4)+3;{1;2;3});1)
Gruß Daniel
AW: Wortteil finden, Danke Daniel
26.04.2019 14:16:11
Curly
Hallo Daniel,
AGGREGAT scheint ja eine ziemlich mächtige Funktion zu sein :-)
Vielen Dank hierfür, aber eine Frage habe ich noch ,
was bewirkt das "--" vor Teil?
Schönes Wochenende
Gruß Curly
Anzeige
AW: Wortteil finden, Danke Daniel
27.04.2019 15:53:55
Daniel
Hi
"- -" wandelt einen Text, der wie eine Zahl aussieht, in eine echte Zahl um.
Das Aggregat braucht für die Auswertung echte Zahlen, da es Texte generell ignoriert.
Man könnte auch die Funktion WERT() verwenden, die sieht aber nicht so elegant aus.
Aggregat ist die verbesserte Version von Teilergebnisse und erlaubt es bspw Fehlerwerte in Auswertungen zu ignorieren, welche ansonsten das Formelergebnis dominieren würden.
Gruß Daniel

306 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige