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

Teile von Dateinamen löschen

Forumthread: Teile von Dateinamen löschen

Teile von Dateinamen löschen
23.05.2025 12:01:46
M.Kurz
Hallo Zusammen,

Ich möchte gerne von Messprotokollen, welche immer hinten eine laufende Nummer bekommen, die letzten 4 Zeichen löschen.
Die Datei sieht z.B. so aus: Messdatei_004.pdf

Zusätzlich würde ich gerne eine Abfrage einbauen, damit nicht unnötigre Zeichen gelöscht werden, sondern nur die Zahlen inkl. Unterstrich.

Das ganze sollte auch in Unterverzeichnissen funktionieren,d.H. ich gebe ein Verzeichnis an bzw. der Pfad ist Excel schon bekannt.
Excel soll quasi nach Ablauf der Messung (Command Button) die Dateinamen bereinigen.

Danke schon mal für Tipps.


Gruß, M. Kurz

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Teile von Dateinamen löschen
23.05.2025 12:16:35
Armin
Hallo M.Kurz,
Dir ist aber klar, dass die File natürlich dann alle den gleichen Namen haben und damit immer überschrieben werden.
Irgend wie hast Du da einen Denkfehler oder Du willst es das dies passiert.

Gruß Armin

AW: Teile von Dateinamen löschen
23.05.2025 16:41:24
daniel
Hi

probiere mal folgendes Makro:

dieses Makro fügst du in eine neue leere Mappe ein
in die Zelle A1 des ersten Tabellenblatts schreibst du dann das Startverzeichnis, welches durchsucht werden soll.
der Rest des Blattes sollte leer sein.
Dann startetst du dieses Makro

der erste Teil schreibt alle infrage kommenden Dateien mit Verzeichnis in die Spalte C und D
dabei werden alle Unterverzeichnisse berücksichtigt.
der zweite Teil führt dann die Bearbeitung durch.
die Liste wird nach Namen sortiert. der Name mit der höchsten Numerierung wird dann umbenannt, die anderen werden gelöscht.

Sub Dateien_überarbeiten()

ReDim vz(0) As String
Dim Dat As String
Dim v As Long
Dim Zelle As Range

vz(0) = ThisWorkbook.Sheets(1).Cells(1, 1).Value
If Right(vz(0), 1) > "\" Then vz(0) = vz(0) & "\"

ThisWorkbook.Sheets(1).Columns("B:E").ClearContents

v = 0
Do Until v > UBound(vz)
Dat = Dir(vz(v) & "*", vbDirectory)
Do Until Dat = ""
If Dat = "." Or Dat = ".." Then
ElseIf (GetAttr(vz(v) & Dat) And vbDirectory) = vbDirectory Then
ReDim Preserve vz(UBound(vz) + 1)
vz(UBound(vz)) = vz(v) & Dat & "\"
ElseIf Dat Like "*_###.pdf" Then
With ThisWorkbook.Sheets(1).Cells(Rows.Count, 3).End(xlUp)
.Offset(1, 0) = vz(v)
.Offset(1, 1) = Dat
End With
Else
End If
Dat = Dir
Loop
v = v + 1
Loop

With ThisWorkbook.Sheets(1)
If .Cells(2, 3).Value > "" Then
With .Cells(2, 3).CurrentRegion
.Sort key1:=.Cells(1, 2), order1:=xlAscending, Header:=xlNo
For Each Zelle In .Columns(2).Cells
If Left(Zelle.Value, Len(Zelle.Value) - 8) = Left(Zelle.Offset(1, 0).Value, WorksheetFunction.Max(0, Len(Zelle.Offset(1, 0).Value) - 8)) Then
Kill Zelle.Offset(0, -1).Value & Zelle.Value
Else
Name Zelle.Offset(0, -1).Value & Zelle.Value As Zelle.Offset(0, -1).Value & Left(Zelle.Value, Len(Zelle.Value) - 8) & Right(Zelle.Value, 4)
End If
Zelle.Offset(0, -1).Resize(, 2).ClearContents
Next
End With
End If
End With


End Sub


Gruß Daniel
Anzeige
AW: Teile von Dateinamen löschen
23.05.2025 12:24:47
M.Kurz
Nein, die Dateien heissen schon unterschiedlich. Also Messdatei_Zwetschge_005.pdf, Messdatei_Pflaume_019.pdf.
Am Schluß sollen eben nur die letzten 4 Zeichen gelöscht sein. Das muss ich sonst immer händisch machen.
AW: Teile von Dateinamen löschen
23.05.2025 12:35:01
M.Kurz
Ach so warte! Jetzt weiss ich was Du meinst: Die anderen Dateien lösche ich auch immer von Hand. Luxus wäre es jetzt natürlich, wenn der Code nur die höchste letzte Ziffer behält, alle anderen darunter löscht und die letzte dann am Schluß noch stripped. :)
Anzeige
AW: Teile von Dateinamen löschen
23.05.2025 12:59:36
Yal
Jetzt wird es erst lustig.

Sub Dateiname_kastrieren()

'Unter Anbindung von:
'Microsoft Scripting Runtime
'(in VBA-Editor, Menü "Extras", "Verweise…", Bibliothek anhaken)
Dim FSO As New FileSystemObject
Dim Dic As New Dictionary
Dim F As File
Dim NPart
Dim Zahl As Long
Dim Elt
Dim F2Rename As File

'Aufbau der Liste mit jeweiligen höchste Zahl
For Each F In FSO.GetFolder("C:\MeinPFad").Files
If F.Name Like "Messdatei_*" Then
NPart = Split(F.Name, ".")
Zahl = CLng(Right(NPart(0), 3))
NPart(0) = Left(NPart(1), Len(NPart(0)) - 3)
If Dic.Exists(NPart(0)) Then
If Zahl > Dic(NPart(0)) Then Dic(NPart(0)) = Zahl
Else
Dic(NPart(0)) = Zahl
End If
End If
Next
For Each Elt In Dic.Keys
'löschen oder bei höchste Zahl zurseite stellen
For Each F In FSO.GetFolder("C:\MeinPFad").Files
If F.Name Like Elt & "*" Then
If Not InStr(1, F.Name, CStr(Dic(Elt))) Then
F.Delete
Else
Set F2Rename = F
End If
End If
Next
'Umbenennen
F2Rename.Name = Replace(F2Rename.Name, Dic(Elt), "")
Next
End Sub


Ich habe übrigens einen Fehler im vorigen Code: NPart(0) und nicht NPart(1). Aber der Code ist eh nicht zu gebrauchen.

VG
Yal
Anzeige
AW: Teile von Dateinamen löschen
23.05.2025 12:37:12
Yal
Hallo M.Kurz,

Sub Dateiname_kastrieren()

'Unter Anbindung von:
'Microsoft Scripting Runtime
'(in VBA-Editor, Menü "Extras", "Verweise…", Bibliothek anhaken)
Dim FSO As New FileSystemObject
Dim F As File
Dim NPart

For Each F In FSO.Getfolder("C:\MeinPFad").Files
If F.Name Like "Messdatei_*" Then
NPart = Split(F.Name, ".")
NPart(1) = Left(NPart(1), Len(NPart(1)) - 4)
F.Name = Join(NPart, ".")
End If
Next
End Sub

Ungetestet.

VG
Yal
Anzeige
AW: Teile von Dateinamen löschen
23.05.2025 12:45:02
M.Kurz
Das test ich mal. Danke schön !
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