fredlabosch
Goto Top

Makro - mehrere csv Dateien aus einem Verzeichnis bearbeiten (bestimmten Bereich löschen) und speichern

Guten Morgen,

leider bin ich ein absoluter Neuling im Bereich Makros und benötige eure Hilfe.

Meine Aufgabenstellung wurde hier evtl. bereits behandelt. Allerdings blicke ich aufgrund meiner nicht vorhandenen Erfahrung mit vba nicht durch , welche "Bausteine" mir bereits weiterhelfen würden.
Daher bitte ich zu entschuldigen, falls es eine ähnliche Frage bereits gab.

Meine Aufgabe:

Ich habe diverse .csv Dateien in einem Ordner abgelegt (ca. 10-30). Diese Dateien haben alle denselben Aufbau.
In Zeile 1 steht eine Kopfzeile, welche unberührt bleiben soll.
Der Bereich C2:W [bis zum Ende]) soll gelöscht werden, so dass der Inhalt aus Spalte X (also ab X2) in der Spalte C (also ab C2) steht. Anschließend soll die Datei gespeichert werden.

Dies konnte ich mit einem Makro abbilden, so dass folgender Code herauskommt:

Sub löschenspeichern()
'
' löschenspeichern Makro
'

'
Range("C2:W2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Delete Shift:=xlToLeft
Range("A1").Select
ActiveWorkbook.Save
End Sub


Meine Bitte ist nun, wie erweitere ich dieses Makro um folgende Funktionen:

- Es soll alle Dateien aus einem bestimmten Verzeichnis auswählen
- Es soll alle Dateien wieder zurück speichern


Für eure Hilfe bedanke ich mich im Vorfeld.

Grüße
Fred

Content-Key: 327237

Url: https://administrator.de/contentid/327237

Ausgedruckt am: 19.03.2024 um 08:03 Uhr

Mitglied: 131381
131381 23.01.2017 um 12:37:34 Uhr
Goto Top
Geht doch viel schneller mit PS
$source = "C:\Ordner"  
$delimiter = ";"  

gci $source -Filter *.csv | %{
    $csv =  gc $_.FullName
    1..($csv.Count-1) | %{
        $cols = $csv[$_].split($delimiter)
        $csv[$_] = "$($cols[0..1] -join ',')$(','*22)$($cols[23])"  
    }
    $csv | set-content $_.FullName
}
Gruß mik
Mitglied: Fredlabosch
Fredlabosch 23.01.2017 um 12:41:53 Uhr
Goto Top
Hallo mikrotik,

Danke für deine Antwort.

Leider habe ich auf der Arbeit kein Programm um PS (PostScript?) zu erstellen oder zu starten.
Ich habe nur Excel 2010 vorliegen.
Kann ich dort auch PS-Befehle einbauen und starten? Wenn ja, an welcher Stelle mache ich dies?
Mitglied: 131381
131381 23.01.2017 aktualisiert um 12:44:37 Uhr
Goto Top
PS = Powershell
Hat heute jeder Windows-Rechner bereits an Bord.
Mitglied: Fredlabosch
Fredlabosch 23.01.2017 um 12:48:19 Uhr
Goto Top
Ok vielen Dank!

Ich probiere es gleich mal aus und berichte.
Mitglied: Fredlabosch
Fredlabosch 23.01.2017 um 12:54:04 Uhr
Goto Top
Leider ist die Ausführung von PowerShell (bzw. die Skripts) auf meinem Rechner untersagt.

Daher benötige ich leider eine VBA Lösung.
Mitglied: 131381
131381 23.01.2017 aktualisiert um 12:55:36 Uhr
Goto Top
Leider ist die Ausführung von PowerShell (bzw. die Skripts) auf meinem Rechner untersagt.
Deppen, PS sperren aber VBA-Makros zulassen face-big-smile

Na dann, findest du alles hier...
Mittels VBA Makro Excel Zellen auslesen und diese in eine CSV Datei exportieren
Mitglied: Fredlabosch
Fredlabosch 23.01.2017 um 13:02:16 Uhr
Goto Top
Danke für den Link.

Allerdings bin ich so ein Neuling, dass ich die einzelnen Bausteine nicht deuten kann.

Wie ich oben erwähnte, benötige ich halt zwei Funktionen, die ich nicht aus bestehenden Programm Codes herauslesen kann.
Mitglied: Fredlabosch
Fredlabosch 23.01.2017 um 15:23:02 Uhr
Goto Top
Ich habe etwas gebastelt:

Sub CSVimportieren()
strPath = "d:\test\"
strExt = "*.csv"
Dim strFile As String
If strPath = "" Then
Exit Sub
Else
strFile = Dir(strPath & strExt)
Do While Len(strFile) > 0
Workbooks.Open Filename:=strPath & strFile
Range("C2:W2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Delete Shift:=xlToLeft
Range("A1").Select
ActiveWorkbook.Save
Workbooks(strFile).Close
strFile = Dir()
Loop
End If
End Sub


Es gibt allerdings noch 2 Probleme:

1. die Spaltentrennung erfolgt nicht bei Semikolon, sondern bei ein Komma, wie kann ich dies ändern?
2. Die Nachricht, ob die csv gespeichert werden soll erfolgt pro Datei. Dies sollte ohne Nachfrage erfolgen.

Evtl. kann mir jemand helfen, diesen Code zu erweitern.

Vielen Dank!
Mitglied: Fredlabosch
Fredlabosch 23.01.2017 um 16:03:53 Uhr
Goto Top
Problem 3:

Dezimalzahlen werden in 2 Spalten aufgeteilt und anschließend wird die rechte Spalte überschrieben.

Wie kann ich Dezimalzahlen in einer Spalte beibehalten?
Mitglied: Fredlabosch
Fredlabosch 24.01.2017 um 12:45:03 Uhr
Goto Top
Ich hab es nun für mich irgendwie mit folgendem Code hinbekommen:

Sub CSVimportieren()
Dim speicherort As String
Dim strFile As String
Dim pfad As String
strPath = "D:\!csv\"
strExt = "*.csv"
pfad = "D:\!csv\Umgewandelt\"
If strPath = "" Then
Exit Sub
Else
strFile = Dir(strPath & strExt)
Do While Len(strFile) > 0
Workbooks.Open Filename:=strPath & strFile, Local:=True
Range("C2:W2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Delete Shift:=xlToLeft
ActiveSheet.SaveAs Filename:=pfad & strFile, FileFormat:=xlCSV, Local:=True
Workbooks(strFile).Close SaveChanges:=False
strFile = Dir()
Loop
End If
End Sub