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

Textdatei nach Excel mit Kriterium

Textdatei nach Excel mit Kriterium
Bernd
Hallo,
ich hatte schon mal zu diesem Problem gepostet, aber die angebotenen Lösungen waren leider nicht ideal bzw. ich hatte keine Mustervorlage zur Verfügung gestellt. Deshalb nochmal meine hoffentlich konkrete Fragestellung. Ich habe eine Textdatei mit mehr als 70.000 Datenzeilen, von denen ich in Excel aber nur einen kleinen Auszug benötige (nur so rund 50 Datenzeilen!!!). Die Textdatei soll also schon beim Import so beschnitten werden, dass auch Excel 2003 keine Probleme macht.
Öffnet man die Textdatei in Excel, dann wird die Tabelle automatisch in Spaltenform dargestellt.
Folgende Importkriterien sollen gelten:
Nur Datenzeilen, die in Spalte B eine "0" aufweisen sind relevant (oder umgekehrt: alle Datenzeilen mit "1" sind irrelevant) und aus dieser Restmenge benötige ich dann nur noch den 1. Datensatz des jeweiligen Datenblockes. Ein Datenblock ist dabei gekennzeichnet durch eine Kombination aus Spalte A und Spalte K (in der Mustervorlage also "636 1" , "636 62" und "876 1). Am Ende sollten aus der Textdatei in Excel also nur noch die Zeilen 1, 9 und 14 übrigbleiben.
Achtung: Öffnet man die Textdatei im Notepad-Editor, dann wird zumindest die Spalte B in anderer Formatierung angezeigt ("0000" statt "0") beispielsweise. Keine Ahnung, ob dies ein Problem sein könnte.
Hier die Vorlage zum Probieren:
https://www.herber.de/bbs/user/72051.txt
Viele Grüße
Bernd
AW: Textdatei nach Excel mit Kriterium
26.10.2010 11:49:17
Tino
Hallo,
versuch mal diesen Code, wenn ich alles verstanden habe sollte er funktionieren.
Habe einen Dialog eingebaut mit dem Du die Textdatei auswählen kannst.
Die Ausgabetabelle und die erste Zelle (hier Tabelle1 A2), müsstest Du unten im Code evtl. auch anpassen.
Option Explicit

Sub Lese_TxT()
Dim sFilename$, sInhalt$, oDic As Object
Dim ArrayData, tmpArray, ArrayAusgabe()
Dim F%
Dim A&, B&

sFilename = Application.GetOpenFilename("Text Files (*.txt),*.txt")

If Dir$(sFilename, vbNormal) = "" Then Exit Sub 'keine Datei 

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

Do While InStr(sInhalt, "  ") > 0
    sInhalt = Replace(sInhalt, "  ", " ")
Loop

ArrayData = Split(sInhalt, vbCrLf)
sInhalt = ""

If Ubound(ArrayData) = -1 Then Exit Sub 'keine Daten 

Redim Preserve ArrayAusgabe(1 To 2, 1 To Ubound(ArrayData) + 1)
Set oDic = CreateObject("Scripting.Dictionary")

For A = Lbound(ArrayData) To Ubound(ArrayData)
    tmpArray = Split(ArrayData(A), Chr(32))
    If Ubound(tmpArray) > 10 Then
        If tmpArray(2) = "0000" Then
            If Not oDic.exists(tmpArray(1) & "-" & tmpArray(11)) Then
                B = B + 1
                ArrayAusgabe(1, B) = tmpArray(1)
                ArrayAusgabe(2, B) = tmpArray(11)
                oDic(tmpArray(1) & "-" & tmpArray(11)) = 0
            End If
        End If
    End If
Next A

Redim Preserve ArrayAusgabe(1 To 2, 1 To B)

With Sheets("Tabelle1") 'Tabelle anpassen 
    .Range("A2", .Cells(.Rows.Count, 2)).ClearContents

    With .Range("A2").Resize(B, 2)
        .Cells = Application.Transpose(ArrayAusgabe)
        'hier evtl. Formatierungen 
    End With
End With

End Sub
Gruß Tino
Anzeige
AW: Textdatei nach Excel mit Kriterium
26.10.2010 12:29:50
Bernd
Hallo,
das Makro läuft durch, folgende Fragen aber bleiben noch offen:
1. Es werden nur 2 Spalten angezeigt ich, ich benötige aber von den gefilterten Datensätzen auch die übrigen Spaltenwerte.
2. Lässt sich die Performance evtl. steigern? Bei mehr als 70.000 Datensätzen hatte ich den Eindruck, dass Excel angestützt war. Aber nach einer kleinen Kaffeepause war das Ergebnis dann zu sehen.
Gruß
Bernd
AW: Textdatei nach Excel mit Kriterium
26.10.2010 12:50:09
Tino
Hallo,
Optimierung kann man immer noch machen, vielleicht läuft der Code so etwas schneller.
Ich dachte auch Du brauchst nur Spalte 1 und 11, habe die restlichen mit eingebaut.
Option Explicit

Sub Lese_TxT()
Dim sFilename$, sInhalt$, oDic As Object
Dim ArrayData, tmpArray, ArrayAusgabe(), varValue
Dim F%
Dim B&, C&

sFilename = Application.GetOpenFilename("Text Files (*.txt),*.txt")

If Dir$(sFilename, vbNormal) = "" Then Exit Sub 'keine Datei 

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

Do While InStr(sInhalt, "  ") > 0
    sInhalt = Replace(sInhalt, "  ", " ")
Loop

ArrayData = Split(sInhalt, vbCrLf)
sInhalt = ""

If Ubound(ArrayData) = -1 Then Exit Sub 'keine Daten 

Redim Preserve ArrayAusgabe(1 To 11, 1 To Ubound(ArrayData) + 1)
Set oDic = CreateObject("Scripting.Dictionary")

For Each varValue In ArrayData
        tmpArray = Split(varValue, Chr(32))
        If Val(tmpArray(2)) = 0 Then
            If Not oDic.exists(tmpArray(1) & "-" & tmpArray(11)) Then
                B = B + 1
                For C = 1 To 11
                    ArrayAusgabe(C, B) = tmpArray(C)
                Next C
                oDic(tmpArray(1) & "-" & tmpArray(11)) = 0
            End If
        End If
Next varValue

Redim Preserve ArrayAusgabe(1 To 11, 1 To B)

With Application
    .ScreenUpdating = False
    .Calculation = xlCalculationManual
    .EnableEvents = False

        With Sheets("Tabelle1") 'Tabelle anpassen 
            .Range("A2", .Cells(.Rows.Count, 2)).ClearContents
        
            With .Range("A2").Resize(B, 2)
                .Cells = Application.Transpose(ArrayAusgabe)
                'hier evtl. Formatierungen 
            End With
        End With
    
    .EnableEvents = True
    .Calculation = xlCalculationAutomatic
    .ScreenUpdating = True
End With
End Sub
Gruß Tino
Anzeige
AW: Textdatei nach Excel mit Kriterium
26.10.2010 15:11:46
Bernd
Hallo,
leider erhalte ich nun die Fehlermeldung "Laufzeitfehler 9: Index außerhalb des gültigen Bereiches".
Der Code bleibt bei
If Val(tmpArray(2)) = 0 Then
hängen.
Ist die Textdatei zu groß?
Gruß
Bernd
AW: Textdatei nach Excel mit Kriterium
27.10.2010 07:52:47
Tino
Hallo,
dann sind wahrscheinlich nicht alle Zeilen ausgefüllt.
Versuch mal diese Variante.
Option Explicit

Sub Lese_TxT()
Dim sFilename$, sInhalt$, oDic As Object
Dim ArrayData, tmpArray, ArrayAusgabe(), varValue
Dim F%
Dim B&, C&

Const TrennZ As String = " "
Const dTrennZ As String = TrennZ & TrennZ

sFilename = Application.GetOpenFilename("Text Files (*.txt),*.txt")

If Dir$(sFilename, vbNormal) = "" Then Exit Sub 'keine Datei 

F = FreeFile
Open sFilename For Binary As #F
sInhalt = Space$(LOF(F))
Get #F, , sInhalt
Close
With CreateObject("Vbscript.Regexp")
    .Pattern = dTrennZ
    .Global = True

    Do While .test(sInhalt)
        sInhalt = .Replace(sInhalt, TrennZ)
    Loop
End With

ArrayData = Split(sInhalt, vbCrLf)
sInhalt = ""

If Ubound(ArrayData) = -1 Then Exit Sub 'keine Daten 

Redim Preserve ArrayAusgabe(1 To 11, 1 To Ubound(ArrayData) + 1)
Set oDic = CreateObject("Scripting.Dictionary")

For Each varValue In ArrayData
        tmpArray = Split(varValue, Chr(32))
        If Ubound(tmpArray) > 10 Then
            If Val(tmpArray(2)) = 0 Then
                If Not oDic.exists(tmpArray(1) & "-" & tmpArray(11)) Then
                    B = B + 1
                    For C = 1 To 11
                        ArrayAusgabe(C, B) = tmpArray(C)
                    Next C
                    oDic(tmpArray(1) & "-" & tmpArray(11)) = 0
                End If
            End If
        End If
Next varValue

Redim Preserve ArrayAusgabe(1 To 11, 1 To B)

With Application
    .ScreenUpdating = False
    .Calculation = xlCalculationManual
    .EnableEvents = False

        With Sheets("Tabelle1") 'Tabelle anpassen 
            .Range("A2", .Cells(.Rows.Count, 11)).ClearContents
        
            With .Range("A2").Resize(B, Ubound(ArrayAusgabe))
                .Cells = Application.Transpose(ArrayAusgabe)
                'hier evtl. Formatierungen 
            End With
        End With
    
    .EnableEvents = True
    .Calculation = xlCalculationAutomatic
    .ScreenUpdating = True
End With
End Sub
Gruß Tino
Anzeige
AW: Textdatei nach Excel mit Kriterium
26.10.2010 11:58:35
Rudi
Hallo,
teste mal:
Sub ttt()
Dim sDaten, arrTmp, arr(1 To 11), arrDaten
Dim n As Integer, m As Integer, j As Integer, i As Long
Dim oTest As Object
Set oTest = CreateObject("Scripting.dictionary")
Open ("c:\test\72051.txt") For Input As #1
sDaten = Split(Input(LOF(1), 1), vbCrLf)
Close 1
ReDim arrDaten(1 To 11, 1 To UBound(sDaten))
For j = 0 To UBound(sDaten) - 1
n = 0
arrTmp = Split(sDaten(j), " ")
For i = 0 To UBound(arrTmp)
If arrTmp(i)  "" Then
n = n + 1
arr(n) = arrTmp(i)
End If
Next i
If arr(2) = "0000" And Not oTest.exists(arr(1) & "|" & arr(11)) Then
m = m + 1
oTest(arr(1) & "|" & arr(11)) = 0
For i = 1 To 11
arrDaten(i, m) = arr(i)
Next i
End If
Next j
Sheets(1).Cells(1, 1).Resize(m, 11) = WorksheetFunction.Transpose(arrDaten)
End Sub

Gruß
Rudi
Anzeige
AW: Textdatei nach Excel mit Kriterium
26.10.2010 12:32:00
Bernd
Hallo,
leider bekomme ich schon nach 2 Sekunden die Fehlermeldung:
"Laufzeitfehler "6" : Überlauf".
Gruß
Bernd
AW: Textdatei nach Excel mit Kriterium
26.10.2010 12:37:26
Rudi
Hallo,
mit deinem Beispiel lief es.
Gruß
Rudi
AW: Textdatei nach Excel mit Kriterium
26.10.2010 14:49:55
Bernd
Hallo,
könnte es nicht mit der Anzahl der Datensätze (größer 70000!) zusammenhängen? In der Vorlage waren ja nur wenige Zeilen enthalten.
Viele Grüße
Bernd
AW: Textdatei nach Excel mit Kriterium
26.10.2010 16:32:48
Rudi
Hallo,
dimensioniere j mal als Long
Gruß
Rudi
AW: Textdatei nach Excel mit Kriterium
27.10.2010 09:18:14
Bernd
Hallo nochmal,
wenn ich es richtig verstanden habe,
dann sollte der Code nun so lauten:
Dim n As Integer, m As Integer, j As Long, i As Long
Leider bleibt der Code dann hier hängen:
Sheets(1).Cells(1, 1).Resize(m, 11) = WorksheetFunction.Transpose(arrDaten)
Als Fehler wird angezeigt: Laufzeitfehler '13", Typen unverträglich.
Von Tino habe ich parallel bereits eine funktionierende Lösung erhalten, insofern wäre ich bereits zufrieden. Aber vielleicht gibt es für Deinen Vorschlag noch eine schnelle Lösung. Manchmal kann es gut sein, wenn man eine "Notfallösung" hat, wenn man von der VBA.Programmierung nicht so viel versteht ;-)
Viele Grüße
Bernd
Anzeige
AW: Textdatei nach Excel mit Kriterium
27.10.2010 09:29:54
Rudi
Hallo,
keine Ahnung. Ich kenne deine Original-Textdatei nicht.
Wenn Tinos Lösung funktioniert, dann nimm sie.
Gruß
Rudi
Danke allen für die Hilfe!
27.10.2010 10:55:03
Bernd

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige