Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1552to1556
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

CSV auftrennen und kopieren

CSV auftrennen und kopieren
02.05.2017 15:52:14
Christian
Hallo. Ich bin dabei verschiedene Markos hintereinander zu schalten, um immer wiederkehrende Abläufe zu automatisieren. Aufgrund meiner geringen Erfahrung zeige ich, was ich bisher zusammengeschustert habe und schreibe unter den Makros was mir noch fehlt.
Makro 1. Öffnen der CSV Dateien eines Ordners und kopieren in die Arbeitsmappe, sowie Auftrennen in die entsprechenden Spalten. Ich möchte hier (sofern es nicht einfacher geht) alle nachfolgenden Makros einbinden.
Sub CSV_Import2()
Dim strPfad As String
Dim lngLastRow As Long
Dim myFileSystemObject, myFiles
'https://www.computerbase.de/forum/showthread.php?t=795101
'https://www.herber.de/forum/archiv/1148to1152/1148032_CSVDateien_mit_VBA_einlesen.html
' Pfad hier anpassen
strPfad = "D:\Daten\Test\Rohdatenbank"
Set myFileSystemObject = CreateObject("Scripting.FileSystemObject")
For Each myFiles In myFileSystemObject.GetFolder(strPfad).Files
If InStr(UCase(myFiles), ".CSV") Then
lngLastRow = ActiveSheet.Cells(65535, 2).End(xlUp).Row
ActiveSheet.Cells(lngLastRow + 1, 1) = Split(myFiles.Name, ".")(0) 'Schreiben des  _
Pfades und Dateinamen in A2
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & myFiles, Destination:=Range(Cells(lngLastRow + 2, 1), Cells(lngLastRow +  _
_
2, 1))) ' Ablage ab A3
.Name = myFiles
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False 'Strichpunkt als Spalten-Trennzeichen
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileDecimalSeparator = "."     ' Punkt als Dezimaltrennzeichen (Standard Komma) _
.TextFileThousandsSeparator = ","   ' Komma für Tausendergruppierung  (Standard  _
Punkt)
.TextFileColumnDataTypes = Array(1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End If
Next myFiles
End Sub
zu 1.
- es sollen nur die Daten der ersten/obersten/... hauptsache nur einer Datei eingefügt werden
- wenn die Daten einer Datei abgearbeitet wurden soll die CSV am Ende gelöscht werden bevor die nächste aufgerufen wird (damit er immer mit der ersten/obersten neu anfangen kann)
-Schleife bilden im Makro 1, dass Makro 1-6 solange erneut durchlaufen werden, bis keine _ Dateien mehr in dem Ordner sind.

strPfad = "D:\Daten\Test\Rohdatenbank"

Makro 2. Pfade, Dateinamen, letzte Zeilen suchen
I1 = Pfadname CSV's || J1 = Pfadname der Zieldatein || K1 = Dateiname Ziel || L1 = Tabellenblattname Ziel || N1 = Letzte Zeile Arbeitsmappe (Quelle)
(werden automatisch nach dem Import gebildet)
Letzte Zeile der Datenbank suchen und in M1 schreiben
Option Explicit
Sub Last_Row_Copy()
Dim p, f, s, r As String
Dim gPfad, gDatei, gMappe As String
r = "A1"
gPfad = Cells(1, 10).Value
gDatei = Cells(1, 11).Value
gMappe = Cells(1, 12).Value
p = gPfad
f = gDatei
s = gMappe
Worksheets("#Konverter").Range("M1") = GetValue(p, f, s, r)
End Sub
Private Function GetValue(Path, file, sheet, ref)
'   Retrieves a value from a closed workbook
Dim arg As String
'   Make sure the file exists
If Right(Path, 1)  "\" Then Path = Path & "\"
If Dir(Path & file) = "" Then
GetValue = "File Not Found"
Exit Function
End If
'   Create the argument
arg = "'" & Path & "[" & file & "]" & sheet & "'!" & _
Range(ref).Range("A1").Address(, , xlR1C1)
'   Execute an XLM macro
GetValue = ExecuteExcel4Macro(arg)
End Function
Letztes Datum und Uhrzeit suchen aus der Datenbank und in O1 (Datum) und P1 (Uhrzeit) schreiben
Option Explicit
Sub Dat_Time_Copy()
Dim p, f, s, r As String
Dim gPfad, gDatei, gMappe As String
r = "A1"
'Zellen mit Pfad, Dateinamen, Mappe
gPfad = Cells(1, 10).Value
gDatei = Cells(1, 11).Value
gMappe = Cells(1, 12).Value
'Übergabe in Variable
p = gPfad
f = gDatei
s = gMappe
Worksheets("#Konverter").Range(Cells(1, 15), Cells(1, 16)) = GetValue(p, f, s, r)
End Sub
Private Function GetValue(Path, file, sheet, ref)
'   Retrieves a value from a closed workbook
Dim arg As String
Dim lzeile As Long
'Letzte Zeile DB
lzeile = Cells(1, 13).Value
'   Make sure the file exists
If Right(Path, 1)  "\" Then Path = Path & "\"
If Dir(Path & file) = "" Then
GetValue = "File Not Found"
Exit Function
End If
'   Create the argument
arg = "'" & Path & "[" & file & "]" & sheet & "'!" & _
Range(ref).Range(Cells(lzeile - 1, 1), Cells(lzeile - 1, 1)).Address(, , xlR1C1)
'   Execute an XLM macro
GetValue = ExecuteExcel4Macro(arg)
End Function

Makro 3.
-Datum (O1) & Uhrzeit (P1) vergleichen mit Spalte A (Datum) und Spalte B (Uhrzeiten)
-Zu kopierender Bereich

Range(Cells(Zeile bei der die Beding. erfüllt ist, 1), Cells(Wert aus N1, 32))

-Einfügen in (im geschlossenen oder unsichtbaren Zustand)
Zielpfad: gPfad = Cells(1, 10).Value
Zieldatei: gDatei = Cells(1, 11).Value
Zielmappe: gMappe = Cells(1, 12).Value
ab Zielzelle: Wert aus M1

-Zieldatei speichern & schließen
Makro 4.
-aktuelles Tabellenblatt säubern
Range(Cells(2, 1), Cells(Wert aus N1, 32))

Makro 5.
-die abgearbeitete CSV Datei löschen, falls nötig / möglich
CSV-Pfad: steht in I1
Dateiname: steht in A2 ohne .csv
Makro 6.
- Das Makro sucht die nächste csv, importiert die Daten mit Makro 1 und bearbeitet die Schrittkette 2,3,4,5 erneut.
Für mich ist das alles noch Neuland, daher bitte nicht so streng sein. Ich bin über jede Hilfe super dankbar, da ich nichtmal in der Lage wäre aus Makro 1 eine funktionierende Schleife zu bauen. Wenn irgendwelche Fragen sind versuche ich diese bestmöglich zu beantworten.

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: CSV auftrennen und kopieren
02.05.2017 16:15:17
Luschi
Hallo Christian,
ich muß mich schon wundern, warum immer noch den alten Methoden nachgehechelt wird,
obwohl M$ neue B/usiness) I(ntelligence)-Technologien in Zusammenhang mit Excel 2013/16 anbietet; d.h.: eigene Wissenshorizont erweitern und sich damit beschäftigen!
PowerQuery ist dazu geeignet, alle Dateien eines bestimmten Dateityps (einschließlich gefilterte Dateien nach Dateinamen) aus einem definierten Verzeichnis einzulesen, ohne daß eine Zeile Vba-Code geschrieben werden muß.
Kommen neue Dateien im Verzeichnis hinzu, so werden sie automatisch mit eingebunden & eingelesen.
Dabei werden alle Maus-Aktionen wie beim Makrorekorder mitgeschrieben und kann nachträglich verändert/angepaßt werden.
Also Mut zu Neuem und verlassen alter Pfade!
Gruß von Luschi
aus klein-Paris
Anzeige
AW: CSV auftrennen und kopieren
02.05.2017 16:29:20
Christian
Das Problem ist, dass man meistens in den ausgetretenen Pfaden läuft. Bis vor wenigen Wochen hatte ich Probleme VBA überhaupt zu verstehen aber habe gehofft auf das Know-How alter Hasen zu bauen. Von dem was du schreibst, habe ich bis dato noch nichts gehört.
AW: CSV auftrennen und kopieren
02.05.2017 16:54:20
Christian
Habe mir eben das Add-In Power Query" runtergeladen und gleich auf das erste Problem gestoßen. Dezimaltrennzeichen ist "." und nicht ",". Das wird nicht so leicht, alle bisher gelösten Probleme erneut zu lösen. Ich wäre trotzdem über eine VBA Lösung erstmal dankbar.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige