Top-Themen

Aktuelle Themen (A bis Z)

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??

Mitglied: br-mv2014

br-mv2014 (Level 1) - Jetzt verbinden

19.02.2014, aktualisiert 23.02.2014, 2915 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 ..
Ähnliche Inhalte
Microsoft Office

Alle CSV-Dateien mit neuem Datum in einem Ordner mit einem VBA Makro einlesen

Frage von parlermo2102Microsoft Office1 Kommentar

Hallo ich habe ein Problem Mit Makro ich möchte 2 CSV dateien per Makro einlesen SetMontageExport-DGS-16-04-11.csv SetMontageExport-NDGS-16-04-11.csv wie bekomme ...

VB for Applications

Alle CSV-Dateien in einem Ordner mit einem VBA Makro einlesen Teil 2

gelöst Frage von sommer2013VB for Applications12 Kommentare

Hallo zusammen, ich bin wie so mancher auch neu hier und habe zu einem Problem von mir hier die ...

VB for Applications

Mehrere CSV-Dateien mit einem VBA Makro einlesen und automatisch verarbeiten

Frage von armini92VB for Applications3 Kommentare

Hallo! Ich schreibe gerade meine Bachelorarbeit und bekomme täglich zahlreiche Messergebnisse im CSV-Format ausgegeben. Diese muss ich manuell konvertieren, ...

Microsoft Office

Csv datei vba makro excel einlesen leicht anpassen - eventuell noch eine Erweiterung

Frage von mrniceguy1977Microsoft Office2 Kommentare

Hallo Zusammen, bin neu bei euch und durch die Suche nach einem CSV Importer auf diese Seite gestossen. Den ...

Neue Wissensbeiträge
Windows 10
Zero-Day-Lücke in Microsoft Edge
Information von kgborn vor 1 TagWindows 10

In Microsofts Edge-Browser klafft wohl eine nicht geschlossene (0-Day) Sicherheitslücke im Just In Time Compiler (JIT Compiler) für Javascript. ...

Sicherheit
Microsoft und Skype: Sicherheit
Information von kgborn vor 1 TagSicherheit

Die Tage gab es ja einige Berichte zur Sicherheit des Skype-Updaters. Der Updater von Skype läuft unter dem Konto ...

Datenschutz

Behörden ignorieren Sicherheitsbedenken gegenüber Windows 10

Information von Penny.Cilin vor 2 TagenDatenschutz8 Kommentare

Hallo, passend zum Thema Ablösung LIMUX in München ein interessanter Beitrag dazu: Behörden ignorieren Sicherheitsbedenken gegenüber Windows 10 Anscheinend ...

Sicherheit
Information Security Hub Munich airport
Information von brammer vor 2 TagenSicherheit

Hallo, Neues Center für Cyber Kriminalität am Münchener Flughafen brammer

Heiß diskutierte Inhalte
DSL, VDSL
Mindestgeschwindigkeiten DSL Telekom
Frage von justlukasDSL, VDSL14 Kommentare

Hallo zusammen, Seit diesem Jahr habe ich Verständnisprobleme mit dem Verhalten der Telekom. Wir haben seit einem Jahr VDSL ...

Windows 10
Windows 10 (1709) Tastur und Maus wieder einschalten?
Frage von LochkartenstanzerWindows 1011 Kommentare

Moin, Ich habe von einem Kunden einen Win10-Rechner bekommen, bei dem weder Tastatur noch Maus geht. Die Hardware funktioniert ...

Humor (lol)
Was könnte man mit einem Server machen? Idee gesucht
Frage von 2SeitenHumor (lol)11 Kommentare

Hey Zusammen Ich habe einen alten HP G2 Rackserver zu Hause rumliegen. 28GB Ram, 1xAMD Prozi mit etwa 2GHz. ...

Switche und Hubs
LANCOM-Switch: Probleme (no link) mit SFP-Modulen?
Frage von THETOBSwitche und Hubs11 Kommentare

Hi zusammen, ich habe folgendes Problem: Und zwar habe ich an einem Standort drei Switche verbaut - LANCOM GS-2326P+, ...