Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1024to1028
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

Zeile aus CSVs in Excel

Zeile aus CSVs in Excel
20.11.2008 21:29:00
Tilo
Hi,
habe ein Problem. Und zwar würde ich gerne alle csv-Dateien in einem Ordner mit einem Makro öffnen und jeweils die Zellen A55:C55 auslesen. Die Zellen sollen in die aktuelle Excel Datei untereinander geschrieben werden. Die csv Dateien haben alle den Namen data x.csv, wobei x die aufsteigende Nummer ist.
Wer kann mir helfen, bzw. gibt es da schon was?
Gruß Tilo

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeile aus CSVs in Excel
20.11.2008 22:28:38
Tino
Hallo,
hier ein Beispiel, sollte funktionieren.
Sub LeseFiles()
Dim Fso, Ordner, varDatei
Dim i As Long, meCalc As Integer
Dim objDatei As Workbook
Dim EinfügBereich As Range
Set Fso = CreateObject("Scripting.FileSystemObject")

Set EinfügBereich = Range("A1:C1") 'erster Einfügebereich!!! 
Set Ordner = Fso.getfolder("C:\Mein_Ordner") 'Pfad Ordner angeben!!! 

With Application
 meCalc = .Calculation
 .EnableEvents = False
 .ScreenUpdating = False
 .Calculation = xlCalculationManual
    
    For Each varDatei In Ordner.Files
     If LCase(varDatei) Like "*.csv" Then
      
      Set objDatei = Workbooks.Open(varDatei, False, True)
          'kopiere Zellen 
          objDatei.Sheets(1).Range("A55:C55").Copy _
          EinfügBereich.Offset(i, 0)
         
         objDatei.Close False
        i = i + 1
     End If
    Next varDatei
 
 .Calculation = meCalc
 .EnableEvents = True
 .ScreenUpdating = True
End With
End Sub


Gruß Tino

www.VBA-Excel.de


Anzeige
AW: Zeile aus CSVs in Excel
20.11.2008 22:42:33
Tilo
Hi Tino,
vielen Dank! Das einlesen funktioniert super.
Allerdings sind die Daten nicht richtig dargestellt.
In der csv Datei liegen die Daten so vor: 20,121s 113,0368 89,98683
und nach dem Import so: 20 121s;113 0368;89
Der Limiter ist ein Semikolon und kein Komma.
Wie bekomme ich dass noch richtig hin?
Vielen Dank nochmals für die schnelle Hilfe.
Gruß Tilo
AW: Zeile aus CSVs in Excel
20.11.2008 22:47:00
Tino
Hallo,
dann müssen wir diese als Textfile einlesen, ein Moment
Gruß Tino
AW: Zeile aus CSVs in Excel
20.11.2008 23:16:00
Tino
Hallo,
versuche es mal hiermit.
Modul Modul1
Option Explicit 
Dim boFehler As Boolean 
Sub LeseFiles() 
Dim Fso, Ordner, varDatei, varDaten 
Dim i As Long, meCalc As Integer 
Dim objDatei As Workbook 
Dim EinfügBereich As Range 
Set Fso = CreateObject("Scripting.FileSystemObject") 
 
Set EinfügBereich = Range("A1:C1") 'erster Einfügebereich!!! 
Set Ordner = Fso.getfolder("C:\Forum\CSV") 'Pfad Ordner angeben!!! 
 
With Application 
 meCalc = .Calculation 
 .EnableEvents = False 
 .ScreenUpdating = False 
 .Calculation = xlCalculationManual 
     
    For Each varDatei In Ordner.Files 
     If LCase(varDatei) Like "*.csv" Then 
        varDaten = txt_Read(varDatei) 
     If boFehler = False Then 
         
       Do While i < 3 Or i <= Ubound(varDaten) 
          EinfügBereich(i + 1) = varDaten(i) 
          i = i + 1 
       Loop 
            i = 0 
       Set EinfügBereich = EinfügBereich.Offset(1, 0) 
      
     End If 
     End If 
    Next varDatei 
  
 .Calculation = meCalc 
 .EnableEvents = True 
 .ScreenUpdating = True 
End With 
End Sub 
 
 
Public Function txt_Read(ByVal sFilename As String) 
Dim F As Integer 
Dim sInhalt As String 
Dim varText 
boFehler = False 
 
    F = FreeFile 
    Open sFilename For Binary As #F 
    sInhalt = Space$(LOF(F)) 
    Get #F, , sInhalt 
    Close #F 
 varText = Split(sInhalt, vbNewLine) 
 
On Error GoTo Fehler 
    txt_Read = Split(varText(54), ";") 
 
Exit Function 
Fehler: 
 boFehler = True 
End Function 
 


Gruß Tino

Anzeige
AW: Zeile aus CSVs in Excel
20.11.2008 23:27:00
Tilo
Hey Tino,
vielen, vielen Dank. Das sieht schon besser aus.
Allerdings sind jetzt die Kommas weg:
csv: 20,121s 470,7021 459,3524
nach import excel: 20,121s 4.707.021 4.593.524
Kannst Du mir da nochmal bitte helfen?
Danke schonmal im voraus.
Gruß Tilo
AW: Zeile aus CSVs in Excel
20.11.2008 23:49:00
Tino
Hallo,
ersetzte mal die Funktion durch diese.
Public Function txt_Read(ByVal sFilename As String)
Dim F As 
style='color:#0000EE'>Integer
Dim sInhalt As String
Dim varText
boFehler = False
 
    F = FreeFile
    Open sFilename For Binary As #F
    sInhalt = Space$(LOF(F))
    Get #F, , sInhalt
    Close #F
 varText = Split(sInhalt, vbNewLine)
 
On Error GoTo Fehler
    varText = Replace(varText, ".", ",")
    txt_Read = Split(varText(54), ";")
 
Exit Function
Fehler:
 boFehler = True
End Function


Eventuell vertausche mal den Punkt mit dem Komma in dieser Zeile
varText = Replace(varText, ".", ",")
Sonst lade mal eine solche .csv hier hoch, eventuell umbenennen in .txt
Gruß Tino

Anzeige
AW: Zeile aus CSVs in Excel
21.11.2008 00:42:18
Tilo
Hi Tino,
jetzt gibt es einen Fehler in der Zeile : style='color:#0000EE'>Integer
Wenn ich style='color:#0000EE'> entferne, läuft es, aber dann kommt nix in der Tabelle.
Hier mal eine Datei.
www.herber.de/bbs/user/57006.txt
Gruß Tilo
AW: Zeile aus CSVs in Excel
21.11.2008 01:02:37
Tino
Hallo,
die Trennung erfolgt bei dir mit Zeichen Tabulator.
Haben schon ein seltsames Format, von woher kommen den diese .csv Dateien,
werden diese von einer Anlage Generiert?
So funktioniert es mit deiner Beispieldatei.
Option Explicit
Dim boFehler As Boolean
Sub LeseFiles()
Dim Fso, Ordner, varDatei, varDaten
Dim i As Long, meCalc As Integer
Dim objDatei As Workbook
Dim EinfügBereich As Range
Set Fso = CreateObject("Scripting.FileSystemObject")

Set EinfügBereich = Range("A1:C1") 'erster Einfügebereich!!! 
Set Ordner = Fso.getfolder("C:\Forum\CSV") 'Pfad Ordner angeben!!! 

With Application
 meCalc = .Calculation
 .EnableEvents = False
 .ScreenUpdating = False
 .Calculation = xlCalculationManual
    
    For Each varDatei In Ordner.Files
     If LCase(varDatei) Like "*.csv" Then
        varDaten = txt_Read(varDatei)
     If boFehler = False Then
        EinfügBereich.NumberFormat = "General"
       Do While i < 3 Or i <= Ubound(varDaten)
          If IsNumeric(varDaten(i)) Then varDaten(i) = Replace(varDaten(i), ",", ".")
          EinfügBereich(i + 1) = varDaten(i)
          i = i + 1
       Loop
            i = 0
       Set EinfügBereich = EinfügBereich.Offset(1, 0)
     
     End If
     End If
    Next varDatei
 
 .Calculation = meCalc
 .EnableEvents = True
 .ScreenUpdating = True
End With
End Sub


Public Function txt_Read(ByVal sFilename As String)
Dim F As Integer
Dim sInhalt As String
Dim varText
boFehler = False

    F = FreeFile
    Open sFilename For Binary As #F
    sInhalt = Space$(LOF(F))
    Get #F, , sInhalt
    Close #F
 varText = Split(sInhalt, vbNewLine)

On Error GoTo Fehler
    varText(54) = Replace(varText(54), " ", "")
    txt_Read = Split(varText(54), vbTab)

Exit Function
Fehler:
 boFehler = True
End Function


Gruß Tino

Anzeige
AW: Zeile aus CSVs in Excel
21.11.2008 04:03:41
Tilo
Hey Tino,
ja super, funktioniert!!! Danke vielmals für die spitzen Hilfe.
Die Dateien sind aus einem Prototypen-Messgerät entnommen.
Also vielen Dank nochmals und bis zum nächsten VBA Problem...;-)
Gruß Tilo

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige