Anzeige
Archiv - Navigation
1768to1772
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

Zahlen und Buchstaben trennen

Zahlen und Buchstaben trennen
01.07.2020 13:20:51
Michael
Guten Tag,
ich habe folgendes Anliegen. Hier die Excel-Datei: https://www.herber.de/bbs/user/138686.xlsx
In der Spalte "Modell" werden sämtliche Modellbezeichnungen aufgeführt. Nun benötige ich ein Makro, dass mir den Inhalt aufteilt.
Beispiel:
In der Zeile steht 100DT das Makro soll zwischen 100 und DT ein Leerzeichen eingefügen. Ergebnis: 100 DT
Das Makro soll einfach zwischen Zahlen und Buchstaben unterscheiden und dort Leerzeichen einfügen. Am Ende sollte das so aussehen wie in der Spalte "Ergebnis". Mehrere Zahlen und Buchstaben hintereinander sollen dabei zusammengefügt bleiben, siehe Spalte "Ergebnis". Dort sieht man auch einige Fälle, wie ich das meine.
Vielen Dank im Voraus!
Viele Grüße
Michael

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
ISTZAHL und ISTZAHL Nachbar
01.07.2020 13:49:48
lupo1
D2:
=WECHSELN(WECHSELN(WECHSELN(GLÄTTEN(TEXTVERKETTEN(;;WENN(
(1-ISTZAHL(--TEIL(B2;SEQUENZ(99)-1;1)))*ISTZAHL(--TEIL(B2;SEQUENZ(99)+0;1))+
(1-ISTZAHL(--TEIL(B2;SEQUENZ(99)+0;1)))*ISTZAHL(--TEIL(B2;SEQUENZ(99)-1;1));" ";"")&TEIL(B2;SEQUENZ(99);1)));" - ";"-");" . ";".");" / ";"/")

Hat etwas gedauert, aber du hast dich ja auch ...
02.07.2020 20:39:25
Luc:?
…noch nicht gemeldet, Michael,
obwohl Lupo längst eine avantgardistische Lösung eingestellt hatte. Um die verwenden zu können, musst du wohl Xl-Abonnent sein… ;-]
Es ist mir gelungen, auch für Nicht-Abonnenten eine Lösung auf Basis einiger UDFs und Standard-Xl-Fktt zu finden, die dein WunschErgebnis für die BspDaten erreicht. Dabei kämen 2 Varianten infrage, die beide insgesamt kürzer (201 bzw 213) sind als Lupos FmlBandwurm (274) und was entscheidender ist, keine 20 Fktsaufrufe enthalten, sondern insgesamt nur 13.
Variante1 - singulare MatrixFml in einer Zelle von ausgelagerter (wg MehrfachVerwendung) kurzer benannter Fml unterstützt:
D2[:D37]: {=WENN(ISTZAHL(B2);B2;TxEval(WIEDERHOLEN("trim(substitute(";ANZAHL2(Maske)*2)&ADRESSE(ZEILE(B2);2;4)&VJoin(","""&Maske&""","" § ""))")&VJoin(",""§"","""&Maske&""",1))")))}
Maske: =VSplit(MaskOn($B2;"num";"/.-"))
Variante2: Statt der UDF TxEval kann auch die alte XLM-Fkt AUSWERTEN benutzt wdn, was aber eine 2.Namensdefinition erforderlich macht. Außerdem wäre dann auf jeden Fall die Speicherung der Datei als .xlsm/b erforderlich, während bei Variante1 eine Speicherung als .xlsx möglich wäre, wenn die Pgmm der UDFs nur in der Personal.xlsm oder einem aktiven AddIn (.xlam) enthalten sind.
D2: =WENN(ISTZAHL(B2);B2;Korrekt)
Korrekt: =AUSWERTEN(WIEDERHOLEN("glätten(wechseln(";ANZAHL2(Maske)*2)&ADRESSE(ZEILE(B2);2;4)&VJoin(";"""&Maske&""";"" § ""))")&VJoin(";""§"";"""&Maske&""";1))"))
In B37 habe ich den Wert XA222YZ2s hinzugefügt, um zu testen, ob Fehler durch das nachgestellte Auftreten einer in einer vorstehenden Zahl verwendeten Ziffer entstehen. Diese Sicherung hat die Fml zwar verlängert, sie ist aber ohnehin nur ein Konstruktor, der einen FmlText nach Bedarf zusammenstellt, der dann mittels TxEval bzw AUSWERTEN berechnet wird. Durch separate Notation der Argumente von TxEval bzw AUSWERTEN als Fml, kann man feststellen, wie dieser aussieht. Die Verdoppelung der WECHSELN-Aufrufe (substitute) war erforderlich, weil alle Zahlen zuerst durch § und danach erst einzeln die § durch die per MaskOn ermittelten ZahlWerte (inkl /.-) ersetzt wdn. Das war notwendig, um zu verhindern, dass die 2.Zahl auf B37 (2) Ziffern in der 1.Zahl (222) ersetzt und so in dieser LeerZeichen eingefügt wdn. Das fktioniert auch mit mehr ZahlenStellen und auch mehr als 2 Zahlen in der ModellBezeichnung. Allerdings ist zu beachten, dass das TextArgument einer Evaluierungsfkt keine unbegrenzte Gesamtlänge haben darf (idR max 256 Zeichen). Für die Bspp hat's aber ausgereicht.
UDF-Links:
MaskOn (Vs2.1) https://www.herber.de/forum/archiv/1344to1348/1344962_Initialen_bei_Doppelnamen.html#1345181
TxEval (Vs1.0) https://www.herber.de/forum/archiv/1476to1480/1476498_Projektplan.html#1477400
VJoin (Vs1.4) & VSplit (Vs1.1) https://www.herber.de/bbs/user/99024.xlsm (DownLoad BspDatei m.UDFs)
Gruß, Luc :-?
„Der beste Beweis für intelligentes Leben im Universum ist, dass noch niemand versucht hat, Kontakt mit uns aufzunehmen.“ H.Lesch, 2018, Sonneberg
Deshalb Intelligenz steigern mit …

Anzeige
Schönheit ...
03.07.2020 07:59:20
lupo1
... war hier sicherlich kein Formeldesign-Beweggrund, Luc ;)
Die Einzelaufrufe ISTZAHL lassen sich nicht zusammenfassen, da viele Excel-Funktionen den Laufzähler nicht nach außen lassen (PRODUKT, SUMME, MAX ...).
Nein, es geht nur um ein eiliges Werkzeug. Einen "McGyver" eben.
Ich hatte schon länger und diverse Ansätze ...
03.07.2020 15:07:15
Luc:?
…benötigt, Lupo,
um eine fehlerfreie Lösung hinzubekommen…
Luc :-?
Nicht nur Schönheit, ...
08.07.2020 03:17:54
Luc:?
…Lupo,
sondern auch Tempo bringt (m)eine zuvor bereits als idealere Lösung solcher Aufgaben von mir erwähnte, nun fertiggestellte und ggf etwas „exotischere“ SubProzedur (nebst Begleitern) ein. Ein importierbares Modul mit dem ganzen Komplex findet sich im Anhang und kann nach Herunterladen und Umbenennen auf ~.bas direkt übernommen wdn (ggf auch alle SubProzeduren aus der .txt-Datei kopieren).
Das „Exotische“ besteht ggf in der Hilfszellen-Fml-Verwendung, die quasi ein Ersetzen ala der von Dir erwähnten excelformeln.de-Fml, aber mehrfach pro Begriff, erlaubt. Viell kommst Du ja drauf, wie das hier fktioniert… ;-)
Anhang: https://www.herber.de/bbs/user/138843.txt
Morhn, Luc :-?
Anzeige
AW: Zahlen und Buchstaben trennen
02.07.2020 22:32:41
Daniel
Hi
wenn VBA eine Option ist, könnte man sich eine kleine Funktion schreiben, die die Aufgabe erledigt.
folgenden Code in ein allgemeines Modul:
Function SpaceZwZifferUndAlfa(Wert)
Dim i As Long
Dim txt2 As String
Dim T1 As String, T2 As String
If VarType(Wert) = vbString Then
txt2 = Left(Wert, 1)
For i = 2 To Len(Wert)
T1 = Mid(Wert, i - 1, 1)
T2 = Mid(Wert, i, 1)
If T1 Like "[0-9]" And Asc(T2) > Asc("A") Or _
Asc(T1) > Asc("A") And T2 Like "[0-9]" _
Then T2 = " " & T2
SpaceZwZifferUndAlfa = SpaceZwZifferUndAlfa & T2
Next
Else
SpaceZwZifferUndAlfa = Wert
End If
End Function

dann in die Tabelle diese Formel einfügen und fertig:
=SpaceZwZifferUndAlfa(B2)
Gruß Daniel
Anzeige
Sorry, kleine Codekorrektur
02.07.2020 22:37:02
Daniel
Bitte diesen Code verwenden:
Function SpaceZwZifferUndAlfa(Wert)
Dim i As Long
Dim T1 As String, T2 As String
If VarType(Wert) = vbString Then
SpaceZwZifferUndAlfa = Left(Wert, 1)
For i = 2 To Len(Wert)
T1 = Mid(Wert, i - 1, 1)
T2 = Mid(Wert, i, 1)
If T1 Like "[0-9]" And Asc(T2) > Asc("A") Or _
Asc(T1) > Asc("A") And T2 Like "[0-9]" _
Then T2 = " " & T2
SpaceZwZifferUndAlfa = SpaceZwZifferUndAlfa & T2
Next
Else
SpaceZwZifferUndAlfa = Wert
End If
End Function
der erste verschluckt das erste Zeichen.
Gruß Daniel
AW: Sorry, kleine Codekorrektur
02.07.2020 23:00:47
Michael
Oh hey,
ich danke euch allen, vor allem dir lupo1! Habe gerade die erste Methode ausprobiert und diese hat bereits funktioniert. Aber für das Archiv sind natürlich mehrere Möglichkeiten perfekt.
Ihr seid super! Hoffe ihr wisst das :)
VG
Michael
Anzeige
Diese Variante läuft fast fehlerfrei, ...
02.07.2020 23:28:55
Luc:?
…Daniel,
nur B21, A68075DT, wird falsch dargestellt, das Leerzeichen zwischen A und 6 fehlt. Der gleiche Fehler tritt dann bei meinem ZusatzBegriff auf, was in beiden Fällen wohl am A vor Ziffer liegt, denn bei B tritt er nicht auf (falscher Anfangs-CodeWert?).
Ansonsten wäre eine reine SubProzedur (analoger Art) bei großen Datenmengen und häufigem Gebrauch wahrscheinlich sinnvoller.
Gruß, Luc :-?
AW: Diese Variante läuft fast fehlerfrei, ...
03.07.2020 00:16:11
Daniel
Dann schaun wir mal, wer sich die Mühe macht, denn Code nicht nur zu kopieren und einzufügen, sondern ihn sich anschaut und versucht die Ursache zu finden.
Das sollte nicht so schwer sein und wer den Code verwenden will, sollte ihn auch verstehen.
Gruß Daniel
Anzeige
Na, in seinem Archiv liegt der gut, ...
03.07.2020 03:40:59
Luc:?
…Daniel,
und ob er ggf nach Jahren noch daran denkt oder ein Anderer sich die Mühe macht alles zu lesen und die Herren Kopierer und Zusammensteller soviel Ehrgeiz entwickeln können oder evtl darauf reinfallen…?
Weiß ja nicht, wie schnell Lupos Fml ist, aber 20 Fktsaufrufe sind schon recht heftig. Leider kann ich deren Fktionalität nicht überprüfen (wie bei deiner UDF)…
Luc :-?
Michaels "2016" erlaubt die Annahme "xl365" ...
03.07.2020 07:41:38
lupo1
... falls er das jedoch tatsächlich nicht hat:
=SEQUENZ(99) entspricht =ZEILE($1:$99) und kann dadurch ersetzt werden
=TEXTVERKETTEN() entspricht dem kostenlosen ...
a) TEXTJOIN in GDocs und
b) VERBINDEN in LibreOffice
_______________
c) Ohne weiteres kann die Formel im für Jederfrau zugänglichen XL-Online ausprobiert werden. Es geht ja eigentlich auch nur um eine einmalige Anwendung, könnte man bei der Aufgabe meinen.
Freigeschalteter Link für OneDrive:
https://1drv.ms/x/s!AsnnAXrDppAdmCy8cecHKcAbk2co?e=GzXDVW
Anzeige
Mit ERSETZEN hatte ich's zuerst versucht ...
03.07.2020 15:04:36
Luc:?
…und dafür die TextAnfänge und -Längen per FINDEN (bzw VLike) ermittelt, Lupo,
aber dadurch wurde die Fml länger als Deine und außerdem müsste man FINDEN ja staffeln, statt nur einen SuchBegriffs(ko)vektor zu verwenden, sonst wird das letzte L im TORELLI-Modell schon in TORELLI gefunden. Mit Ziffern/Zahlen wäre es ähnlich, weshalb ich schließlich in 1.Schritt ein einzelnes ErsatzZeichen verwendet habe. Die erforderliche Fml-Struktur ergibt sich aber erst durch den gezielten Zusammenbau der EinzelKomponenten und dann ist das Text, der einer Auswertung oder Nachbehandlung mit separatem Aufruf bedarf.
Ich weiß jetzt nicht, worauf sich Dein mehrfach verwendbar konkret bezieht, aber meine Fml kann alle derartigen Stellen in einem Text nach Wunsch behandeln.
Gruß + schöWE, Luc :-?
Anzeige
Es ist etwas anders als vermutet ...
04.07.2020 01:04:47
Luc:?
…und liegt an diesem nicht optimalen Bedingungsteil:
If T1 Like "[0-9]" And Asc(T2) > Asc("A") Or _
Asc(T1) > Asc("A") And T2 Like "[0-9]" _
Then T2 = " " & T2

Luc :-?

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige