Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Textdatei importieren (VBA)

Forumthread: Textdatei importieren (VBA)

Textdatei importieren (VBA)
Daniel
Hallo zusammen,
vlt. könnt ihr mir auf die Sprünge helfen.
Ich exportiere aus einer Excel Datei Datensätze in eine Textdatei, Datenfelder werden mit dem pipe
( | ) getrennt.
Datensatz ist wie folgt aufgebaut
abc|KDNR|1,5|100|...
def|KDNR||50...
Diesen Export lade ich nun in eine bestehende Tabelle.
Import funktionert, leider bekomme ich den Wert '1,5' als Zeichenfolge in die Zelle eingetragen und kann mit diesem Wert nun nicht weiterrechnen.
Kann ich vor dem Import die '1,5' als Wert 'deklarieren' bspw. mit CDbl?
Der Code den ich für den Import hier gefunden habe und verwende:
Sub TextImport()
Dim iRow As Integer, iCol As Integer
Dim sFile As String, sTxt As String
sFile = Range("P1").Value
If Dir(sFile) = "" Then
Beep
MsgBox "Datei wurde nicht gefunden!"
Exit Sub
End If
iRow = 1
iCol = 1
Close
Open sFile For Input As #1
Do Until EOF(1)
Line Input #1, sTxt
Do While InStr(sTxt, "|")
Cells(iRow, iCol).Value = Left(sTxt, InStr(sTxt, "|") - 1)
sTxt = Right(sTxt, Len(sTxt) - InStr(sTxt, "|"))
iCol = iCol + 1
Loop
Cells(iRow, iCol).Value = sTxt
iRow = iRow + 1
iCol = 1
Loop
Close
End Sub
Muss ich ggf. eine andere Vorgehensweise für den Import verwenden?
Für eine Rücksprache besten Dank im Voraus.
Grüße, Daniel
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Textdatei importieren (VBA)
20.02.2012 18:50:18
Josef

Hallo Daniel,
probier es mal so.
Sub TextImport()
  Dim iRow As Integer, iCol As Integer
  Dim sFile As String, sTxt As String
  Dim vntTmp As Variant
  
  sFile = Range("P1").Value
  
  If Dir(sFile) = "" Then
    Beep
    MsgBox "Datei wurde nicht gefunden!"
    Exit Sub
  End If
  
  iRow = 1
  iCol = 1
  
  Open sFile For Input As #1
  Do Until EOF(1)
    Line Input #1, sTxt
    sTxt = Replace(sTxt, ",", ".")
    vntTmp = Split(sTxt, "|")
    vntTmp = Application.Transpose(Application.Transpose(vntTmp))
    Cells(iRow, iCol).Resize(1, UBound(vntTmp, 1)) = vntTmp
    iRow = iRow + 1
  Loop
  Close #1
  
End Sub



« Gruß Sepp »

Anzeige
AW: Textdatei importieren (VBA)
21.02.2012 18:28:47
Daniel
Hallo Sepp,
vielen Dank für deine Hilfe!
Funktioniert einwandfrei!
Es ist so dass ich in dem Datensatz auch Datum habe, diese werden ebenfalls als Zeichenkette in die
Zellen übertragen.
Gibt es hier auch einen ähnlichen Ansatz dafür?
Grüße, Daniel
AW: Textdatei importieren (VBA)
21.02.2012 18:45:04
Josef

Hallo Daniel,
dann so.
Sub TextImport()
  Dim lngRow As Long, lngCol As Long
  Dim sFile As String, sTxt As String
  Dim vntTmp As Variant, vntOut() As Variant
  Dim lngIndex As Long
  
  sFile = Range("P1").Value
  
  If Dir(sFile) = "" Then
    Beep
    MsgBox "Datei wurde nicht gefunden!"
    Exit Sub
  End If
  
  lngRow = 1
  lngCol = 1
  
  Open sFile For Input As #1
  Do Until EOF(1)
    Line Input #1, sTxt
    vntTmp = Split(sTxt, "|")
    Redim vntOut(1 To 1, 1 To UBound(vntTmp) + 1)
    For lngIndex = 0 To UBound(vntTmp)
      If IsDate(vntTmp(lngIndex)) And InStr(1, vntTmp(lngIndex), ",") = 0 Then
        vntOut(1, lngIndex + 1) = CDbl(CDate(vntTmp(lngIndex)))
      ElseIf IsNumeric(vntTmp(lngIndex)) Then
        vntOut(1, lngIndex + 1) = CDbl(vntTmp(lngIndex))
      Else
        vntOut(1, lngIndex + 1) = vntTmp(lngIndex)
      End If
    Next
    Cells(lngRow, lngCol).Resize(1, UBound(vntOut, 2)) = vntOut
    lngRow = lngRow + 1
  Loop
  Close #1
  
End Sub



« Gruß Sepp »

Anzeige
AW: Textdatei importieren (VBA)
22.02.2012 07:55:23
Daniel
Guten Morgen Sepp,
Perfekt!
Besten Dank für deine Hilfe!

Funktioniert einwandfrei!
Schönen Tag zusammen!
Grüße, Daniel
;
Anzeige
Anzeige

Infobox / Tutorial

Textdatei in Excel importieren mit VBA


Schritt-für-Schritt-Anleitung

Um eine Textdatei in Excel zu importieren und sicherzustellen, dass numerische Werte korrekt als solche interpretiert werden, kannst Du den folgenden VBA-Code verwenden. Dieser Code berücksichtigt die Trennung der Werte durch das Pipe-Symbol (|) und konvertiert die Werte vor dem Einfügen in die Excel-Zellen.

Sub TextImport()
    Dim lngRow As Long, lngCol As Long
    Dim sFile As String, sTxt As String
    Dim vntTmp As Variant, vntOut() As Variant
    Dim lngIndex As Long

    sFile = Range("P1").Value

    If Dir(sFile) = "" Then
        Beep
        MsgBox "Datei wurde nicht gefunden!"
        Exit Sub
    End If

    lngRow = 1
    lngCol = 1

    Open sFile For Input As #1
    Do Until EOF(1)
        Line Input #1, sTxt
        vntTmp = Split(sTxt, "|")
        ReDim vntOut(1 To 1, 1 To UBound(vntTmp) + 1)

        For lngIndex = 0 To UBound(vntTmp)
            If IsDate(vntTmp(lngIndex)) And InStr(1, vntTmp(lngIndex), ",") = 0 Then
                vntOut(1, lngIndex + 1) = CDbl(CDate(vntTmp(lngIndex)))
            ElseIf IsNumeric(vntTmp(lngIndex)) Then
                vntOut(1, lngIndex + 1) = CDbl(vntTmp(lngIndex))
            Else
                vntOut(1, lngIndex + 1) = vntTmp(lngIndex)
            End If
        Next lngIndex

        Cells(lngRow, lngCol).Resize(1, UBound(vntOut, 2)) = vntOut
        lngRow = lngRow + 1
    Loop
    Close #1
End Sub

Häufige Fehler und Lösungen

  • Problem: Werte wie 1,5 werden als Zeichenfolge importiert.

    • Lösung: Verwende CDbl oder CDate im Importcode, um die Werte korrekt zu konvertieren.
  • Problem: Die Datei wird nicht gefunden.

    • Lösung: Stelle sicher, dass der Pfad zur Datei in Zelle P1 korrekt ist und die Datei vorhanden ist.

Alternative Methoden

Eine alternative Methode besteht darin, die integrierte Importfunktion von Excel zu nutzen:

  1. Öffne Excel und gehe zu Daten.
  2. Wähle Daten abrufen und dann Aus Text/CSV.
  3. Wähle die gewünschte Textdatei aus und folge den Anweisungen im Dialogfeld.
  4. Achte darauf, die richtigen Trennzeichen auszuwählen.

Praktische Beispiele

Angenommen, Du hast eine Textdatei mit folgendem Inhalt:

abc|KDNR|1,5|100|...
def|KDNR||50|...

Mit dem oben angegebenen VBA-Code wird dieser Inhalt in die Zellen von Excel importiert, wobei 1,5 korrekt als numerischer Wert interpretiert wird.


Tipps für Profis

  • Nutze die Application.ScreenUpdating und Application.Calculation-Einstellungen, um die Performance beim Import großer Datenmengen zu verbessern.
  • Speichere regelmäßig Deine Arbeit und teste den Code in einer Kopie Deiner Excel-Datei, um Datenverlust zu vermeiden.
  • Verwende Debug.Print, um die Werte während des Imports zu überprüfen, falls Du auf Probleme stößt.

FAQ: Häufige Fragen

1. Wie kann ich beim Import auch Datumswerte korrekt behandeln? Um Datumswerte richtig zu importieren, kannst Du die IsDate-Funktion im Importcode verwenden, wie im obenstehenden Beispiel.

2. Was mache ich, wenn die Textdatei sehr groß ist? Bei sehr großen Textdateien kann es hilfreich sein, den Import in Batches durchzuführen oder die Excel-Einstellungen für die Berechnung und Bildschirmaktualisierung temporär zu deaktivieren, um die Performance zu verbessern.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige