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

Printed on: April 25, 2024 at 08:04 o'clock

Mitglied: 131381
131381 Jan 23, 2017 at 11:37:34 (UTC)
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
Member: Fredlabosch
Fredlabosch Jan 23, 2017 at 11:41:53 (UTC)
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 Jan 23, 2017 updated at 11:44:37 (UTC)
Goto Top
PS = Powershell
Hat heute jeder Windows-Rechner bereits an Bord.
Member: Fredlabosch
Fredlabosch Jan 23, 2017 at 11:48:19 (UTC)
Goto Top
Ok vielen Dank!

Ich probiere es gleich mal aus und berichte.
Member: Fredlabosch
Fredlabosch Jan 23, 2017 at 11:54:04 (UTC)
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 Jan 23, 2017 updated at 11:55:36 (UTC)
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
Member: Fredlabosch
Fredlabosch Jan 23, 2017 at 12:02:16 (UTC)
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.
Member: Fredlabosch
Fredlabosch Jan 23, 2017 at 14:23:02 (UTC)
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!
Member: Fredlabosch
Fredlabosch Jan 23, 2017 at 15:03:53 (UTC)
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?
Member: Fredlabosch
Fredlabosch Jan 24, 2017 at 11:45:03 (UTC)
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