Anzeige
Archiv - Navigation
1700to1704
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

Teile eines Textes ausgeben

Teile eines Textes ausgeben
20.07.2019 15:53:27
Christian
Hallo, ich bitte um eure Hilfe.
Habe in G1:G587 587 Internetseiten, die wie alle Internetseiten "/" beinhalten.
Ich suche einmal eine Formel die den Text zwischen dem letzten und dem vorletzten / ausgibt
und eine die den Teil zwischen dem vorletzten und dem drittletzten / ausgibt.
Habt ihr so eine zur Hand und gebt sie mir?
Danke
Christian

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Teile eines Textes ausgeben
20.07.2019 16:36:07
Christian
Hallo Onur,
bin jetzt mit einer Makrolösung ein wenig überrascht worden, aber sie funktioniert, danke.
Gruß
Christian
AW: Teile eines Textes ausgeben
20.07.2019 16:37:45
onur
Das sind UDFs (User Defined Functions), die du in der Datei überall wie eine "normale" Excel-Funktion benutzen kanst.
AW: Teile eines Textes ausgeben
20.07.2019 16:47:01
Christian
ja ich hatte mich unglücklich ausgedrückt. Hate das mit den UDF schon verstanden und sie auch in meine Mappe übernommen.
Ich war in sofern überrascht, dass ich dachte, eine Formellösung wäre deutlich simpler als ein Makro zu schreiben oder die Formel, die Werner gepostet hat.
Gruß
Christian
Anzeige
AW: Teile eines Textes ausgeben
20.07.2019 17:30:01
onur
In vielen Fällen sind UDFs wesentlich einfacher zu realisieren.
Wobei du das bei dieser Aufgabe auch so ...
22.07.2019 02:48:22
Luc:-?
…hättest gestalten können, onur (& Christian),
dass nur eine UDF benötigt worden wäre, zB so:
Function TP(Txt As String, Optional ByVal Pos As Long = 1)
Dim lv As Long, rh As Long, tx$()
tx = Split(Txt, "/")
lv = LBound(tx) - 1 + Pos: rh = UBound(tx) + Pos
If Pos > 0 Then TP = tx(lv) Else TP = tx(rh)
End Function
Hier kann auch die gewünschte TextPosition vorgegeben wdn. Somit wären folgd Fmln möglich:
Für beliebige Positionen → J1[:K1]:=TP($G1;1-SPALTE(B1))
Hier aber ausreichend → J1[:K1]:=TP($G1;-SPALTE(A1))
Man kann also die Position ≥1 (von links/vorn) oder ≤0 (rechts/hinten gezählt) angeben.
OT: Bei der Gelegenheit habe ich endlich auch entdeckt, wie man den Xl-FktsEffekt des Unterschieds zwischen einem gänzlich fehlenden letzten Argument und einem nur durch ein ; angedeuteten in einer UDF nachgestalten kann [wie bspw bei WENN(A1="";1;) zu WENN(A1="";1)]:
Function TxPos(Txt As String, ParamArray Pos())
Dim lv As Long, rh As Long, ps As Long, tx$()
If UBound(Pos)  0 Then TxPos = tx(lv) Else TxPos = tx(rh)
End Function
Ggf müsste man noch abfangen, dass kein Array als 1.Komponente des ParamArrays angegeben wird.
Die diesen Effekt nutzenden Fmln sähen hierfür dann so aus: 1.Position → J2:=TxPos($G1) — letzte Position → K2:=TxPos($G1;)

Ansonsten hätte ich ja für bereits im Archiv enthaltene UDFs plädiert, die bereits Positionsangaben zulassen. Davon gibt's mehrere, u.a. meine, die zu folgd Fmln führen …
• Mit 2 UDFs ohne Splitten: L1[:M1]:=PickOn($G1;CountOn($G1;"/")-SPALTE(A1)+1;"/")
• Länger m.nur 1 UDF: L2[:M2]:=PickOn($G1;LÄNGE($G1)-LÄNGE(WECHSELN($G1;"/";""))-SPALTE(A1)+1;"/")
• 2 UDFs m.Splitten in pluraler MatrixFml (über 2 Spalten):
L4:M4: {=INDEX(VSplit(G1;"/");CountOn(G1;"/")-SPALTE(A:B)+1)}
L5:M5: {=Splint(G1;"/";CountOn(G1;"/")-1;CountOn(G1;"/"))} Wobei hier das 4.Argument ggf fehlen darf:
L6:M6: {=Splint(G1;"/";CountOn(G1;"/")-1)}
UDF-ArchivLinks:
CountOn (Vs1.1) https://www.herber.de/forum/archiv/732to736/732035_Zaehlennwenn_mit_Zahlenkombinationen.html#734566
PickOn (Vs1.1) https://www.herber.de/forum/archiv/1140to1144/1141994_Teilstring_aus_String_entfernen.html#1142025
(Folgebeiträge m.Korrekturen beachten!)
Splint (Vs1.2) https://www.herber.de/forum/archiv/1584to1588/t1584372.htm#1584465
VSplit (Vs1.1) https://www.herber.de/bbs/user/99024.xlsm (BspDatei m.UDFs)
Morhn, Luc :-?
Anzeige
OT: (für Interessenten)
22.07.2019 14:24:47
Luc:-?
Meine alternative UDF mit Simulation von xl-typischer Unterscheidung von …x;) und …x) bei Fktt enthält einen Denkfehler, weshalb ich sie nochmals überarbeitet habe:
Rem Nachgestalt d.Xl-Effekts letzt Argument fehlt ganz
'   oder zeigt nur LiTrenner am Bsp einer Text-Splittg
'   Nur ggf exist 1.Element v.Arg3 wird benutzt u.darf
'   seinerseits kein Array sein (wird nicht überprüft)
'   Anm: xlFktAssi lässt option ; am FmlEnde gern weg!
'   Vs1.1 -LSr -cd:20190722 -1pub:20190722h -lupd:20190722t
Function TxPos(Text$, ByVal TrennZ$, ParamArray TPos())
Dim lv As Long, rh As Long, pos As Long, txt() As String
On Error Resume Next
If IsMissing(TrennZ) Then TrennZ = " "
If IsError(TPos(0)) Then
pos = Abs(UBound(TPos))
Else: pos = CLng(TPos(0))
End If
txt = Split(Text, TrennZ)
lv = LBound(txt) - 1 + pos: rh = UBound(txt) + pos
If pos > 0 Then TxPos = txt(lv) Else TxPos = txt(rh)
End Function
Jetzt fktioniert sie auch mit Angabe des (hier) 3.Arguments richtig.
Gruß, Luc :-?
Anzeige
AW: (D)eine gewünschte Formellösung ...
20.07.2019 16:29:15
neopa
Hallo Christian,
... könnte z.B. so aussehen:

=LINKS(TEIL(G1;FINDEN("$$$";WECHSELN(G1;"/";"$$$";LÄNGE(G1)-LÄNGE(WECHSELN(G1;"/";""))-1))+1;99);
FINDEN("/";TEIL(G1;FINDEN("$$$";WECHSELN(G1;"/";"$$$";LÄNGE(G1)-LÄNGE(WECHSELN(G1;"/";""))-1))+1;99))-1)

Gruß Werner
.. , - ...
AW: (D)eine gewünschte Formellösung ...
20.07.2019 16:37:23
Christian
Hallo Werner,
auch dir danke, zumindest diese Formel funktioniert, aber ich habe jetzt keine Ahnung wie ich daraus die andere Formel machen soll.
Gruß
Christian
AW: die gleiche Formel ...
20.07.2019 17:03:53
neopa
Hallo Christian,
... dazu bedarf es lediglich darin die ersten zweimal "-1" durch "-2" zu ersetzen.
Also so:
=LINKS(TEIL(G1;FINDEN("$$$";WECHSELN(G1;"/";"$$$";LÄNGE(G1)-LÄNGE(WECHSELN(G1;"/";""))-2))+1; 99);FINDEN("/";TEIL(G1;FINDEN("$$$";WECHSELN(G1;"/";"$$$";LÄNGE(G1)-LÄNGE(WECHSELN(G1;"/";"")) -2))+1;99))-1)
Gruß Werner
.. , - ...
Anzeige
AW: die gleiche Formel ...
20.07.2019 17:09:53
Christian
Hallo Werner,
auch das funktionier, danke.
Gruß
Christian
zweitletzter und drittletzter Textteil
20.07.2019 16:47:34
WF
Hi,
zweitletzter:
=GLÄTTEN(TEIL(WECHSELN(GLÄTTEN(A1);"/";WIEDERHOLEN(" ";199));(LÄNGE(A1)-LÄNGE(WECHSELN(A1;"/";))) *199-198;199))
drittletzter:
=GLÄTTEN(TEIL(WECHSELN(GLÄTTEN(A1);"/";WIEDERHOLEN(" ";199));(LÄNGE(A1)-LÄNGE(WECHSELN(A1;"/";))-1) *199-198;199))
WF
siehe unsere:
http://excelformeln.de/formeln.html?welcher=301
AW: zweitletzter und drittletzter Textteil
20.07.2019 17:08:36
Christian
Hallo WF,
funktioniert, danke.
Gruß
Christian
Etwas kürzer mit LINKS(RECHTS(
24.07.2019 14:45:24
lupo1
=GLÄTTEN(LINKS(RECHTS(WECHSELN(A1;"/";WIEDERHOLEN(" ";199));199*2);199))
=GLÄTTEN(LINKS(RECHTS(WECHSELN(A1;"/";WIEDERHOLEN(" ";199));199*3);199))
Anzeige
AW: sehr schöne Lösung ...
24.07.2019 15:32:28
neopa
Hallo lupo,
... ich konnte mir das von Dir aufgestellte Grundprinzip leider nie merken (zumindest bis jetzt).
Vielleicht eher, wenn Du bestätigen solltest, dass folgende Verlängerung Deiner Formel noch korrekt ist:
=GLÄTTEN(LINKS(RECHTS(WECHSELN(A1;"/";WIEDERHOLEN(" ";LÄNGE(A1)));LÄNGE(A1)*[#]);LÄNGE(A1)))
Gruß Werner
.. , - ...
LÄNGE(A1) statt 199 ist legitim.
24.07.2019 16:11:33
lupo1
Da die ganze Lösung jedoch sowieso jedesmal säuberlich "auf die Gegebenheiten hin vermessen" werden muss, bleibe ich gern bei den "Konstanten mit Wiedererkennungswert", also 19, 99, 199 usw.
http://www.office-hilfe.com/support/showthread.php/22254-String-oder-csv-mit-Trennzeichen-per-Formel-auf-Zellen-aufteilen
(dort im "Fazit" auch die klassische, zwar längere, aber auch überlegene Variante)
Anzeige
AW: danke für den Link owT
24.07.2019 17:40:04
neopa
Gruß Werner
.. , - ...

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige