Excel Dateien durchsuchen und Teile extrahieren
Hallo,
ich habe eine große Menge an Excel Dateien, die gleichermaßen aufgebaut sind:
In jeder Datei sind in Spalte A in jeder Zelle mehrere Werte durch Kommas getrennt. Jedoch brauche ich nur die Werte bis zum vierten Komma.
Gibt es eine Möglichkeit durch Makros etc. alle Dateien auf einen Schub zu bearbeiten, dass in jeder Zelle nur die Werte bis zum 4. Komma bleiben und der Rest gelöscht wird?
Ich hoffe jmd kann mir helfen,
Grüße
ich habe eine große Menge an Excel Dateien, die gleichermaßen aufgebaut sind:
In jeder Datei sind in Spalte A in jeder Zelle mehrere Werte durch Kommas getrennt. Jedoch brauche ich nur die Werte bis zum vierten Komma.
Gibt es eine Möglichkeit durch Makros etc. alle Dateien auf einen Schub zu bearbeiten, dass in jeder Zelle nur die Werte bis zum 4. Komma bleiben und der Rest gelöscht wird?
Ich hoffe jmd kann mir helfen,
Grüße
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 336412
Url: https://administrator.de/contentid/336412
Ausgedruckt am: 26.11.2024 um 07:11 Uhr
14 Kommentare
Neuester Kommentar
Hallo,
Nein, die müssen und werden eben nacheinander bearbeitet. Je mehr Dateien, je länger...
Sind die Anzahl an Zeichen (inkl. Leerzeichen) bis zum 4ten Komma immer gleich oder variiert das?
Ist VBA erlaubt?
Sind die Exceldateien alle im gleichen Ordner oder gar in ein LAN fröhlich verteilt?
Was soll passieren wenn Fehler auftauchen / Dateien gesperrt sind?
Gruß,
Peter
PS: Was ist dein Budget für Dienstleistungen?
Nein, die müssen und werden eben nacheinander bearbeitet. Je mehr Dateien, je länger...
zu bearbeiten, dass in jeder Zelle nur die Werte bis zum 4. Komma bleiben und der Rest gelöscht wird?
Ja, natürlich. Per Basic, VB, VBS, VBA, Powershell, usw. oder soll / muss das als Formel sein?Sind die Anzahl an Zeichen (inkl. Leerzeichen) bis zum 4ten Komma immer gleich oder variiert das?
Ist VBA erlaubt?
Sind die Exceldateien alle im gleichen Ordner oder gar in ein LAN fröhlich verteilt?
Was soll passieren wenn Fehler auftauchen / Dateien gesperrt sind?
Ich hoffe jmd kann mir helfen,
Schon mal den Makrorecorder deines Excel angeschmissen?Gruß,
Peter
PS: Was ist dein Budget für Dienstleistungen?
Servus.
Schnell als VBS zusammengeschrieben, Pfad in Zeile 2 anpassen.
Grüße Uwe
Schnell als VBS zusammengeschrieben, Pfad in Zeile 2 anpassen.
On Error Resume Next
Const FOLDER = "D:\Sheets"
Set fso = CreateObject("Scripting.FileSystemObject")
Set objExcel = CreateObject("Excel.Application")
With objExcel
.Visible = False
.DisplayAlerts = False
.ScreenUpdating = False
End With
For Each file In fso.GetFolder(FOLDER).Files
If LCase(fso.GetExtensionName(file.Name)) = "xlsx" Then
With objExcel.Workbooks.Open(file.Path).Sheets.Item(1)
For Each cell In .Range("A1:A" & .Cells.Item(.Rows.Count,"A").End(-4162).Row)
If cell.Value <> "" Then
arrData = Split(cell.Value,",",-1,1)
If UBound(arrData) >= 2 Then
cell.Value = Join(Array(arrData(0),arrData(1),arrData(2)),",")
End If
End If
Next
.Parent.Save
.Parent.Close
End With
End If
Next
With objExcel
.DisplayAlerts = True
.ScreenUpdating = True
.Quit
End With
Set fso = Nothing
Set objExcel = Nothing
MsgBox "Habe fertig",vbInformation
Weil das extra als VBS Skript vorgesehen ist ohne Prozedur für das Ausführen direkt außerhalb von Excel
Du packst das in eine Textdatei mit der Endung *.vbs und passt den Ordner an und klickst doppelt auf das Skript. Du brauchst es also nicht in eine Excel-Datei packen. Das kann man auch, aber ich dachte so ist es für dich einfacher.
Es verarbeitet automatisch alle Dokumente des angegebenen Ordners.
Während der Verarbeitung siehst du nichts, erst zum Schluss wenn alle Mappen verarbeitet wurden kommt die Meldung zur Fertigstellung.
Du packst das in eine Textdatei mit der Endung *.vbs und passt den Ordner an und klickst doppelt auf das Skript. Du brauchst es also nicht in eine Excel-Datei packen. Das kann man auch, aber ich dachte so ist es für dich einfacher.
Es verarbeitet automatisch alle Dokumente des angegebenen Ordners.
Während der Verarbeitung siehst du nichts, erst zum Schluss wenn alle Mappen verarbeitet wurden kommt die Meldung zur Fertigstellung.
Klar kein Problem.
Dateiname der zu erstellenden erstellte Datei in Zeile 3 eintragen.
Dateiname der zu erstellenden erstellte Datei in Zeile 3 eintragen.
On Error Resume Next
Const FOLDER = "D:\Daten"
Const ABSTRACT = "D:\Daten\out\zusammenfassung.xlsx"
Set fso = CreateObject("Scripting.FileSystemObject")
Set objExcel = CreateObject("Excel.Application")
Set dic = CreateObject("scripting.dictionary")
With objExcel
.Visible = False
.DisplayAlerts = False
.ScreenUpdating = False
End With
For Each file In fso.GetFolder(FOLDER).Files
If LCase(fso.GetExtensionName(file.Name)) = "xlsx" Then
With objExcel.Workbooks.Open(file.Path).Sheets.Item(1)
For Each cell In .Range("A1:A" & .Cells.Item(.Rows.Count,"A").End(-4162).Row)
If cell.Value <> "" Then
arrData = Split(cell.Value,",",-1,1)
If UBound(arrData) >= 2 Then
cell.Value = Join(Array(arrData(0),arrData(1),arrData(2)),",")
If dic.Exists(arrData(2)) Then
dic.Item(arrData(2)) = dic.Item(arrData(2)) + 1
Else
dic.Add arrData(2),1
End If
End If
End If
Next
.Parent.Save
.Parent.Close
End With
End If
Next
keys = dic.Keys
If Not fso.FolderExists(fso.GetParentFolderName(ABSTRACT)) Then fso.CreateFolder fso.GetParentFolderName(ABSTRACT)
With objExcel.Workbooks.Add.Sheets(1)
For i = 0 To UBound(keys)
.Cells.Item(i+1,1).Value = keys(i)
If dic.Item(keys(i)) > 1 Then .Cells.Item(i+1,2).Value = dic.Item(keys(i))
Next
.Parent.SaveAs ABSTRACT
.Parent.Close
End With
With objExcel
.DisplayAlerts = True
.ScreenUpdating = True
.Quit
End With
Set fso = Nothing
Set objExcel = Nothing
MsgBox "Habe fertig." & vbNewline & "Die Zusammenfassung finden sie unter '" & ABSTRACT & "'.",vbInformation
Zitat von @Beranavan:
1. Wenn ich in der Liste, in der alles zusammengefasst wird, in Spalte A sortieren lasse, sollen die Werte aus Spalte B mitgenommen werden. Wie bekomme ich das hin?
Werf deinen Makrorekorder an dann siehst du wie das in VBA-Code aussieht 1. Wenn ich in der Liste, in der alles zusammengefasst wird, in Spalte A sortieren lasse, sollen die Werte aus Spalte B mitgenommen werden. Wie bekomme ich das hin?
2. In den anderen Listen soll alphabetisch sortiert werden, jedoch die erste Zeile soll ausgelassen werden. Diese soll immer die erste bleiben. Wenn ich bei der Sortiermethode Im Range A2 auswähle, wird immernoch die erste Zeile mit sortiert. Was mache ich falsch?
s.o.
Hättest du mal in die Referenz geschaut, wärst du drauf gekommen das du die 0 am Ende auf 1 setzen musst, denn die steht für den Parameter Header und wenn du Überschriften hast muss dieser auf xlYes stehen was einer 1 entspricht! Im Ausgabesheet habe ich ja keine Überschriften hinzugefügt deswegen verwende ich dort eine 0 für xlNo.
Und der Debugger hilft dir schon beim Testen ohne das Skript um die Konstanten und deren Werte zu sehen, da die Konstanten in VBS nicht vorhanden sind !
Und das .Range("A2") bringt hier nichts ,A1 bleibt hier ebenfalls gleich, also nur den Header-Parameter anpassen, also:
oder eben alternativ den belegten Range ohne Überschrift ermitteln und mit 0 (Header = xlNo) sortieren
Für VBS Nutzung musst du einfach nur die Parameter in ihre Values auflösen und benannte Parameter in Positionsparameter umfunktionieren da es die Konstanten in VBS nicht gibt und benannte Parameter nicht funktionieren, und dabei hilft dir der Debugger bzw. das Direkteingabefeld im VBA Editor bevor du es im VBS Codr nutzt, so einfach ist das.
So denn ich bin jetzt raus, alles andere steht in der Referenz, es ist alles gesagt .
Grüße Uwe
Und der Debugger hilft dir schon beim Testen ohne das Skript um die Konstanten und deren Werte zu sehen, da die Konstanten in VBS nicht vorhanden sind !
Und das .Range("A2") bringt hier nichts ,A1 bleibt hier ebenfalls gleich, also nur den Header-Parameter anpassen, also:
.Range("A").Sort .Range("A1"),1,,,,,,1
.Range("A2:A" & .Cells(.Rows.Count,"A").End(-4162).Row).Sort .Range("A1"),1,,,,,,0
Für VBS Nutzung musst du einfach nur die Parameter in ihre Values auflösen und benannte Parameter in Positionsparameter umfunktionieren da es die Konstanten in VBS nicht gibt und benannte Parameter nicht funktionieren, und dabei hilft dir der Debugger bzw. das Direkteingabefeld im VBA Editor bevor du es im VBS Codr nutzt, so einfach ist das.
So denn ich bin jetzt raus, alles andere steht in der Referenz, es ist alles gesagt .
Grüße Uwe