Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

VBA - Zeichenkette von rechts kürzen

Forumthread: VBA - Zeichenkette von rechts kürzen

VBA - Zeichenkette von rechts kürzen
08.10.2025 08:24:29
Hans
Guten Morgen,

ich möchte von Dateipfaden den rechten teil immer um 3 Ebenen kürzen.

Beispiel:
von C:\Users\Hans\Desktop\Dokumente\Word\Vorlagen\Beispiele\Ordner1
auf C:\Users\Hans\Desktop\Dokumente\Word

Wenn ich die Anzahl der Zeichen angebe kann ich es aber leider ändert die sich immer daher möchte ich nur die 3 Ebenen rechts entfernen. Wie geht denn das?

Grüße
Hans
Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Probiere es mal...
08.10.2025 10:07:52
Case
Moin Hans, :-)

... so: ;-)

Option Explicit

Public Sub Main()
Dim strTMP As String
strTMP = "C:\Users\Hans\Desktop\Dokumente\Word\Vorlagen\Beispiele\Ordner1"
MsgBox Application.Evaluate("TEXTBEFORE(" & """" & strTMP & """" & ",""\"",-3)")
End Sub

Servus
Case
Anzeige
Danke euch
08.10.2025 11:03:35
Hans
Danke euch beiden für eure Hilfe.

Case kannst du mir bitte sagen wie deine Lösung funktioniert? Bei Formeln weiß ich das es left, mid, right gibt um von den unterschiedlichen Seiten was wegzulassen, aber wo ist das in deinem Code?

Grüße Hans
AW: Danke euch
08.10.2025 11:18:27
daniel
Hi

Das „Left“ ist hier „TextBefore“
Dies ist eine„Left“ -Variante, bei der Trennzeichen verwendet werden.
Diese gibt es in Excel 365, aber noch nicht in VBA. Aber man kann über Evaluate jede Excelformel in VBA berechnen lassen.

Gruß Daniel
Anzeige
Schau mal in...
08.10.2025 11:23:24
Case
Moin Hans, :-)

... den Link: ;-)
https://support.microsoft.com/de-de/office/textbefore-funktion-d099c28a-dba8-448e-ac6c-f086d0fa1b29

Alternative:
Viele lehnen RegEx ab, aber damit kannst du wunderbar Strings manipulieren: ;-)
Option Explicit

Public Sub Main_R()
With CreateObject("VBScript.RegExp")
.Pattern = "^(.*)(\\[^\\]+){3}$"
MsgBox .Replace("C:\Users\Hans\Desktop\Dokumente\Word\Vorlagen\Beispiele\Ordner1", "$1")
End With
End Sub

Servus
Case
Anzeige
Du kennst das...
08.10.2025 12:04:59
Case
Moin Hans, :-)

... unter Umständen noch aus "alten" Excelversionen: ;-)
=LINKS(A1;AGGREGAT(14;6;ZEILE(A$1:A$255)/(TEIL(A1;ZEILE(A$1:A$255);1)="\");3)-1)

Oder: ;-)
=LINKS(A1;KGRÖSSTE(WENN(TEIL(A1;ZEILE($1:$255);1)="\";ZEILE($1:$255));3)-1)

Die kannst du auch "evaluieren" (du kannst nicht alle Formeln evaluieren): ;-)

Option Explicit

Public Sub Main_F()
Dim strTMP As String
strTMP = "C:\Users\Hans\Desktop\Dokumente\Word\Vorlagen\Beispiele\Ordner1"
MsgBox Application.Evaluate("LEFT(" & """" & strTMP & """" & ",LARGE(IF(MID(A1,ROW($1:$255),1)=""\"",ROW($1:$255)),3)-1)")
MsgBox Application.Evaluate("LEFT(" & """" & strTMP & """" & ",AGGREGATE(14,6,ROW(A$1:A$255)/(MID(A1,ROW(A$1:A$255),1)=""\""),3)-1)")
End Sub

Zum Thema EVALUATE: ;-)
https://learn.microsoft.com/de-de/office/vba/api/Excel.Application.Evaluate

Mit EVALUATE wertest du den "Ausdruck" aus. ;-)

Servus
Case
Anzeige
Danke für eure Hilfe :-)
10.10.2025 11:28:16
Hans
Sorry das ich erst jetzt Antworte. Ich habe eure Beispiele getestet und bei mir abgespeichert.

Nochmals vielen Dank für die zahlreichen Beiträge ihr habt mir gut weitergeholfen :-)

Grüße
Hans
AW: VBA - Zeichenkette von rechts kürzen
08.10.2025 10:56:04
daniel
Hi

in Excel bei deiner Excelversion per Formel

=TextVor(A1;"\";-3)


in VBA wirds dann aufwendiger, da es TextVor noch nicht in die WorksheetFunctions geschafft.
eine Möglichkeit wäre, die Funktion über Evaluate anzuwenden wie von Case gezeigt:

eine andere
Dim x1 As String, x2 As String

Dim arr
Dim i As Long
x1 = "C:\Users\Hans\Desktop\Dokumente\Word\Vorlagen\Beispiele\Ordner1"
arr = Split(x1, "\")
x2 = arr(0)
For i = 1 To UBound(arr) - 3
x2 = x2 & "\" & arr(i)
Next
MsgBox x1 & vbLf & x2


Gruß Daniel
Anzeige
AW: VBA - Zeichenkette von rechts kürzen
08.10.2025 11:04:13
volti
Hallo Hans,

ergänzend zu den bereits gemachten Vorschlägen noch zwei Varianten...

Die letztere die wohl klassische Variante, zugegebenerweise weit entfernt von Cases bestechender Kurzform.

Sub Test2()

Dim strTMP As String, sArr() As String

strTMP = "C:\Users\Hans\Desktop\Dokumente\Word\Vorlagen\Beispiele\Ordner1"
sArr = Split(strTMP, "\")
ReDim Preserve sArr(UBound(sArr) - 3)
strTMP = Join(sArr, "\")

MsgBox strTMP
End Sub

Sub Test3()
Dim strTMP As String, i As Long, p As Long

strTMP = "C:\Users\Hans\Desktop\Dokumente\Word\Vorlagen\Beispiele\Ordner1"
For i = Len(strTMP) To 1 Step -1
If Mid(strTMP, i, 1) = "\" Then
p = p + 1
If p = 3 Then strTMP = Left(strTMP, i - 1): Exit For
End If
Next i

MsgBox strTMP
End Sub


Gruß
Karl-Heinz
Anzeige
AW: VBA - Zeichenkette von rechts kürzen
08.10.2025 13:34:08
UweD
Hallo


Für alte Excel...

Arbeitsblatt mit dem Namen 'Tabelle1'
 AB
1C:\Users\Hans\Desktop\Dokumente\Word\Vorlagen\Beispiele\Ordner1C:\Users\Hans\Desktop\Dokumente\Word

ZelleFormel
B1=LINKS(A1;FINDEN("|";WECHSELN(A1;"\";"|";LÄNGE(A1)-LÄNGE(WECHSELN(A1;"\";""))-2))-1)



LG UweD
Anzeige
AW: VBA - Zeichenkette von rechts kürzen
08.10.2025 16:56:26
GerdL
Hallo Hans!
Sub Unit()


Dim txt As String, vnt As Variant, strmsg As String

txt = "C:\Users\Hans\Desktop\Dokumente\Word\Vorlagen\Beispiele\Ordner1"
vnt = Split(txt, "\", Len(txt) - Len(Replace(txt, "\", "")) - 1, vbTextCompare)
strmsg = Replace(txt, "\" & vnt(UBound(vnt)), "")
MsgBox strmsg


End Sub

Gruß Gerd
Anzeige
AW: VBA - Zeichenkette von rechts kürzen
08.10.2025 17:19:43
daniel
noch ein Gedicht:

dim x1 as string

dim x2 as string
dim i as long
x1 = "C:\Users\Hans\Desktop\Dokumente\Word\Vorlagen\Beispiele\Ordner1"
x2 = x1
for i = 1 to 3
x2 = left(x2, instrrev(x2, "\") - 1)
next
msgbox x1 & vblf & x2


gruß daniel
Anzeige
AW: VBA - Zeichenkette von rechts kürzen
08.10.2025 11:58:58
BoskoBiati
Hi,

mit Formeln abseits von TEXTVOR:

=LET(xa;LÄNGE(A1);xb;LÄNGE(WECHSELN(A1;"\";""));xc;xa-xb-2;LINKS(A1;SUCHEN("#";WECHSELN(A1;"\";"#";xc))-1))

=LINKS(A1;SUCHEN("#";WECHSELN(A1;"\";"#";LÄNGE(A1)-LÄNGE(WECHSELN(A1;"\";""))-2))-1)


Gruß

Edgar
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18