Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Alle CSV-Dateien in einem Ordner mit einem VBA Makro einlesen - Datumsformat weg??

Frage Microsoft Microsoft Office

Mitglied: br-mv2014

br-mv2014 (Level 1) - Jetzt verbinden

19.02.2014, aktualisiert 23.02.2014, 2708 Aufrufe, 9 Kommentare, 3 Danke

Hallo allerseits,
ich bin neu hier, versuche mich nur gelegentlich in vba-progrämmchen und war erfreut hier unter

"Alle CSV-Dateien in einem Ordner mit einem VBA Makro einlesen"

eine gelungene Programmsequenz (colinardo am 29.08.2013 um 11:49 Uhr)

für meine Zwecke gefunden zu haben.Leider übernimmt die Anwendung beim Einsammeln der csv-Daten
in einer Spalte nicht das Datumsformat.Für meine weitere Anwendung in excell 2010 benötige ich das
aber unnbedingt. Im csv-Ausgangsformat verfügen dieselben Daten noch über ein gültiges Datumsformat.

Wäre schön, wenn mir einer der hiesigen Könner helfen könnte. Habe schon alles Möglich probiert und
durchsucht. Komme nicht weiter. Vieln Dank schon mal für jeden brauchbaren Tipp!


Arbeite mit Win7/ Office 2010

Ach ja: habe das bei mir wie folgt abgeändert:

Sub ImportiereCSVDateien()


Const CSVPFAD = "F:\FiBu\Konto-Auszüge\Konto-Auszüge 2013\TAe"
Dim wbTarget As Workbook, wbSource As Workbook, ws As Worksheet, ts As Worksheet
Set fso = CreateObject("Scripting.Filesystemobject")
Set wbTarget = ActiveWorkbook
Application.DisplayAlerts = False

'Lösche alle Worksheets bevor wir alle neu anlegen
While wbTarget.Worksheets.Count > 1
wbTarget.Worksheets(1).Delete
Wend

wbTarget.Worksheets(1).Name = "Zusammenfassung"
wbTarget.Worksheets(1).Range("A:ZZ").Clear
For Each f In fso.GetFolder(CSVPFAD).Files
If LCase(Right(f.Name, 3)) = "csv" Then
Workbooks.OpenText Filename:=f.Path
Set wbSource = ActiveWorkbook
On Error Resume Next
Set ws = wbTarget.Worksheets(f.Name)
If Err <> 0 Then
Set ws = wbTarget.Worksheets.Add
ws.Name = f.Name
ws.Range("A:ZZ").Clear
End If

wbSource.Worksheets(1).Range("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Semicolon:=True, TrailingMinusNumbers:=True
wbSource.Worksheets(1).Range("A:ZZ").Copy Destination:=ws.Range("A1")
wbSource.Close False
End If
Next
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Konto_Nr_setzen


Range("B2").Select
ActiveCell.FormulaR1C1 = "=IF(R1C2=""Textschlüssel"",IF(RC1>0,2,0),0)"
Range("B2").Select
Selection.Copy
Range("B3:B500").Select
ActiveSheet.Paste
Sheets("1004147623.csv").Select
Range("B2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=IF(R1C2=""Textschlüssel"",IF(RC1>0,3,0),0)"
Range("B2").Select
Selection.Copy
Range("B3:B500").Select
ActiveSheet.Paste
Sheets("1010415147.csv").Select
Range("B2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=IF(R1C2=""Textschlüssel"",IF(RC1>0,1,0),0)"
Range("B2").Select
Selection.Copy
Range("B3:B500").Select
ActiveSheet.Paste

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''


Set ts = wbTarget.Worksheets("Zusammenfassung")
Dim curCell As Range
Set curCell = ts.Range("A1")
For i = 1 To wbTarget.Worksheets.Count - 1
maxRow = wbTarget.Worksheets(i).Range("A1").End(xlDown).Row
maxCol = wbTarget.Worksheets(i).Range("A1").End(xlToRight).Column
wbTarget.Worksheets(i).Range(wbTarget.Worksheets(i).Cells(1, 1), wbTarget.Worksheets(i).Cells(maxRow, maxCol)).Copy Destination:=curCell
Set curCell = curCell.End(xlDown).Offset(2, 0)
Next
Application.DisplayAlerts = True
Set fso = Nothing
Sheets("Zusammenfassung").Select




End Sub




VGe br-mv
Mitglied: colinardo
20.02.2014 um 09:38 Uhr
Hallo br-mv,
dafür gibt es in der TextToColumn Funktion das Feld FieldInfo in dem man den Datentyp jeder einzelnen Spalte festlegen kann.
Wenn die Daten durch Trennzeichen getrennt sind, ist dieses Argument ein Array aus Arrays mit zwei Elementen. Jedes Array mit zwei Elementen gibt die Umwandlungsoptionen für eine bestimmte Spalte an. Das erste Element ist die Spaltennummer (beginnend mit 1), und das zweite Element ist eine der xlColumnDataType-Konstanten, die angeben, wie die Spalte analysiert wird.
die XlColumnDataType Konstanten sind folgende:
xlGeneralFormat. Allgemein  
xlTextFormat. Text   
xlMDYFormat. Datum im Format MTJ  
xlDMYFormat. Datum im Format TMJ  
xlYMDFormat. Datum im Format JMT  
xlMYDFormat. Datum im Format MJT  
xlDYMFormat. Datum im Format TJM  
xlYDMFormat. Datum im Format JTM  
xlEMDFormat. Datum im EMD-Format  
xlSkipColumn. Spalte überspringen 
so könnte dann die folgende Zeile aussehen die den Text in Spalten zerlegt:
Im Beispiel, wird für Spalte 1 das Textformat und für Spalte 2 ein Datumsformat festgelegt:
01.
feldFormate = Array(Array(1,xlTextFormat),Array(2,xlDMYFormat)) 
02.
wbSource.Worksheets(1).Range("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Semicolon:=True, TrailingMinusNumbers:=True, FieldInfo:=feldFormate
Denke das sollte helfen

Grüße Uwe
Bitte warten ..
Mitglied: br-mv2014
21.02.2014 um 18:25 Uhr
Hallo Uwe,

vielen herzlichen Dank für die prompte Hilfe. Habe die Programmsequenz gleich mal ausprobiert. Funktioniert einwandfrei, Datumsangaben werden jetzt korrekt importiert. Habe nun aber leider festgestellt, dass eine andere Spalte aus der csv-Datei ebenfalls nicht richtig interpretiert wird. Es handelt sich um Zahlen mit Währungszusatz "EUR" . Hier habe ich mittels Makro den Zusatz eliminieren können. Die verbleibenden Zahlenwerte lassen sich aber partout nicht in Zahlen formatieren. Seltsamer Weise gilt das nicht für alle Beträge innerhalb derselben Spalte. Andere werden erkannt Gibt es hierfür auch ein xl.???Format. für die Importfunktion? Habe das Netz schon durchsucht, werde aus den Beiträgen hierzu aber nicht schlau. Hoffe nochmals auf Hilfe.

VGe
Bernhard
Bitte warten ..
Mitglied: colinardo
LÖSUNG 21.02.2014, aktualisiert 23.02.2014
auch schon mittels Trim() alle führenden und nachlaufenden Leerzeichen in den Spalten entfernt ? Danach solltest du eventuell noch die Werte via VBA in Zahlen wandeln und diesen Wert wieder der jeweiligen Zelle der Value-Eigenschaft zuweisen und das Zahlenformat für die Zellen explizit setzen.
Der Zahlenspalte solltest du die xlGeneralFormat Konstante zuweisen.
Kenne leider die Formatierung deiner CSV-Datei nicht, damit ich das mal nachstellen könnte, eventuell mal einen Ausschnitt davon irgendwo hochladen.
Wenn das bei dir alles nichts bei der Textimportfunktion hilft, bliebe als Option noch die CSV manuell via VBA zu parsen.

Grüße Uwe
Bitte warten ..
Mitglied: br-mv2014
21.02.2014 um 22:56 Uhr
Naja, ob ich deine Vorschläge noch in diesem Jahr umgesetzt bekommen würde, weiß ich nicht?? Würde gern eine Muster-csv mal hochladen, geht das hier im Forum? Finde keine Option hierfür.

VG
Bernhard
Bitte warten ..
Mitglied: br-mv2014
21.02.2014 um 23:01 Uhr
Die csv stammt übrigens aus der Export-Funktion von starmoney-business 6.0. Vielleicht kennst du das verwendete Datenformat. Ich möchte die Export-Daten unter Excel weiter aufbereiten.

VG
Bernhard
Bitte warten ..
Mitglied: colinardo
LÖSUNG 22.02.2014, aktualisiert 08.03.2014
So, habe mal ein paar Tests gemacht... Die Spalte in der die Beträge stehen sollten als Dezimaltrennzeichen am besten einen Punkt haben, mit einem Komma hatte ich hier trotz gesetztem Parameter in der Funktion Probleme.
Habe dann die entsprechende Spalte nach dem Import folgendermaßen behandelt um den EUR-Wert und das Zell-Format (Währung) festzulegen (Spalte in Zeile 1 festlegen):
Die Variable ws entspricht dem Worksheet in dem die Daten formatiert werden.
01.
Set rngStart = ws.Range("G1") 
02.
Set rngEnd = rngStart.End(xlDown) 
03.
For Each cell In ws.Range(rngStart, rngEnd) 
04.
   normalizedValue = Trim(Replace(cell.Value, "EUR", "", 1, -1, 1)) 
05.
   normalizedValue = Replace(normalizedValue, ",", ".", 1, -1, 1) 
06.
   cell.NumberFormat = "#,##0.00 $"    
07.
   cell.Value = normalizedValue 
08.
Next
Aus Spaß habe ich mal eine manuelle CSV-Parse-Routine geschrieben (in die Excel nicht reinpfuscht ), die die Analyse der Zahlen selber vornimmt und aus dem Bereich gleichzeitig eine richtige Tabelle mit Spaltenfiltern macht.
Wie immer ohne Gewähr
01.
Sub testImport() 
02.
    importCSV "C:\Temp\demo.csv", ";", ActiveSheet.Range("A1") 
03.
End Sub 
04.
 
05.
Function importCSV(strPath, delim, targetRange As Range) 
06.
    Set fso = CreateObject("Scripting.FileSystemObject") 
07.
    Set regex = CreateObject("vbscript.regexp") 
08.
    patNumber = "^([\d\.,\+\-]+)\s?(EUR|€|\$)$" 
09.
    patDate = "^\d{2}\.\d{2}\.\d{2,4}$" 
10.
    arrLines = Split(fso.OpenTextFile(strPath, 1).ReadAll(), vbNewLine, -1, vbTextCompare) 
11.
    Set rngCurrent = targetRange 
12.
    For i = 0 To UBound(arrLines) 
13.
        If arrLines(i) <> "" Then 
14.
            cols = Split(arrLines(i), delim, -1, vbTextCompare) 
15.
            For c = 0 To UBound(cols) 
16.
                rngCurrent.Offset(0, c).ClearFormats 
17.
                wert = Trim(Replace(cols(c), """", "", 1, -1, vbTextCompare)) 
18.
                ' check for Numberformat 
19.
                regex.Pattern = patNumber 
20.
                Set matches = regex.Execute(wert) 
21.
                If matches.Count > 0 Then 
22.
                    wert = Replace(matches(0).Submatches(0), ".", "", 1, -1, vbTextCompare) 
23.
                    wert = Replace(wert, ",", ".", 1, -1, vbTextCompare) 
24.
                    rngCurrent.Offset(0, c).NumberFormat = "#,##0.00 $;[RED]-#,##0.00 $" 
25.
                End If 
26.
                'check for DateFormat 
27.
                regex.Pattern = patDate 
28.
                Set matches = regex.Execute(wert) 
29.
                If matches.Count > 0 Then 
30.
                    wert = DateValue(matches(0)) 
31.
                End If 
32.
                ' set value in cell 
33.
                rngCurrent.Offset(0, c).Value = wert 
34.
            Next 
35.
            Set rngCurrent = rngCurrent.Offset(1, 0) 
36.
        End If 
37.
    Next 
38.
    ' Create ListObject table 
39.
    targetRange.Worksheet.ListObjects.Add xlSrcRange, Range(targetRange, rngCurrent.Offset(0, targetRange.End(xlToRight).Column)) 
40.
     
41.
    Set fso = Nothing 
42.
    Set regex = Nothing 
43.
End Function
Grüße Uwe
Bitte warten ..
Mitglied: br-mv2014
22.02.2014 um 22:06 Uhr
Hallo Uwe,
vielen Dank, dass du dir mit meinem Problem soviel Arbeit machst. Hatte nicht gesehen, dass du schon einen Lösungsvorschlag entworfen hattest. Habe den nun mit der übermittelten Musterdatei ausprobiert. Der Währungsbetrag kommt zwar ohne Währungsabgabe rüber, ist aber links ausgerückt und hat noch kein Zahlenformat. Lässt sich auch nicht als solches formatieren. Schade.

VGe
Bernhard
Bitte warten ..
Mitglied: colinardo
LÖSUNG 23.02.2014, aktualisiert um 23:18 Uhr
Zitat von br-mv2014:
Habe den nun mit der übermittelten Musterdatei ausprobiert. Der Währungsbetrag kommt zwar ohne
Währungsabgabe rüber, ist aber links ausgerückt und hat noch kein Zahlenformat. Lässt sich auch nicht als
solches formatieren. Schade.
Die Funktionen sind oben angepasst...hört sich jetzt blöd an, aber Excel hat Probleme mit den Kommas in den Beträgen, hier möchte es viel lieber Punkte sehen, diese umgewandelt und schon klappt es.

Grüße Uwe
Bitte warten ..
Mitglied: br-mv2014
23.02.2014 um 23:36 Uhr
Hallo Uwe,

ist wirklich seltsam. Jetzt funktioniert der Import einwandfrei mit den gewünschten Formaten. Wäre ich vermutlich nicht drauf gekommen. Vielen Dank auch für diesen guten Tipp!

Gekonnt gelöst, wirklich!

VG
Bernhard
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Microsoft Office
Alle CSV-Dateien mit neuem Datum in einem Ordner mit einem VBA Makro einlesen (1)

Frage von parlermo2102 zum Thema Microsoft Office ...

VB for Applications
gelöst Mehrere CSV Dateien aus verschiedenen Ordner einlesen via VBA (12)

Frage von mtufangil zum Thema VB for Applications ...

Microsoft Office
gelöst CSV-Datei mit einem VBA Makro in Excel einlesen und leicht anpassen (5)

Frage von JoSiBa zum Thema Microsoft Office ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Microsoft Office
Keine Updates für Office 2016 (12)

Frage von Motte990 zum Thema Microsoft Office ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...