online 1
gast (50)

/ Forum / Tabellenkalkulation

TabellenkalkulationTabellenkalkulation

Fragevon MarcoP vom 31.10.2019, 10:15 Options

jede 5 Zeile aus .txt Datei in Excel kopieren

Hi,
ich habe eine txt datei, welche ca 100'000 Zeilen hat.
Ich würde gerne ab Zeile 7 der txt Datei nur jede Zeile kopieren.
Ist das irgendwie realisierbar?


Oder noch besser kann ich die Zeilenanzahl auslesen und schauen welchen Sprung ich kopieren könnte damit die Gesamtzeilenzahl nicht über 32000 geht. Es ist für ein Diagramm gedacht.

Also sagen wir in der TXT sind 32007 Zeilen.
Dann habe ich 32000 Zeilen und das schafft excel.

Sagen wir ich habe 64000 Zeilen,
Dann soll Excel nur jeden zweiten Wert kopieren.

Also ich denke mal so
(Zeilenzahl/32000) und dann die letzte kommastelle einfach streichen (Bsp. 2,9 wird zu 2).

Ist sowas zu realisieren?
Wäre nett.
Danke schonmal


Antwort schreiben

Antwort 1 von coros vom 02.11.2019, 12:31 Options

Hallo Marco,

ich hoffe, dass ich alles richtig verstanden habe. War etwas schwer, weil Du in der Überschrift etwas von jeder 7. Zeile schreibst, dann im Text etwas von jeder 2. Zeile und abschließend etwas von Kommastellen wegstreichen.

Ich habe Dir mal folgendes Makro erstellt, das nach dem Starten ein Dialogfenster zur Auswahl der einzulesenden Datei öffnet. Wurde dort eine Datei ausgewählt, wird die Zeilenanzahl ermittelt. Wenn die Zeilenanzahl der einzulesenden Datei über 32000 Zeilen liegt, erscheint eine kurze Meldung auf dem Bildschirm, dass nur jeder 2. Wert eingelesen wird. Danach werden die Daten eingelesen. Handelt es sich um eine Datenmenge, die mehr als 65536 Zeilen beansprucht, wird ein neues Tabellenblatt angelegt und die Daten werden dann dort weiter aufgeführt. Wenn das 2. Tabellenblatt am Ende wird ein 3., dann ein 4. usw. angelegt. Kommastellen werden in diesem Makro nicht gestrichen, da ich das nicht verstanden habe. Auch werden keine Daten getrennt, wenn in einer Zeile mehr als ein Wert, die eventuell durch ein Komma oder Semikolon getrennt sind, vorkommen. Du hattest Dich diesbezüglich nicht geäußert, daher bin ich von immer nur einem Wert pro Zeile ausgegangen.

Kopiere das Makro in ein StandardModul und starte es z.B. über eine Befehlsschaltfläche

[b]Option Explicit

Sub Datei_einlesen()
'------------------------------
Dim txtlines As Long
Dim i As Long
Dim n As Long
Dim WorkbookName As Workbook
Dim ActiveSheetName As String
'Für Office97 muss das Array TextArr als String definiert werden
Dim textArr As Variant
Dim dataFitting
Dim Anzahl_Blätter As Integer
Dim Text1 As String
Dim ReadFile As String

'Variabel "Anzahl_Blätter" auf den Wert 1 setzen
Anzahl_Blätter = 1

'Dialog öffnen auf Basis von *.dat Files
ReadFile = Application.GetOpenFilename("DAT Files (*.*),")

'Wenn Abbruchtraste beatätigt wurde
On Error GoTo Weiter
If ReadFile = False Then Exit Sub

Weiter:

'Leerblatt einfügen
Sheets.Add Before:=Sheets(1)
Sheets(1).Name = "Leer"

'Schliessen falls Datei bereits offen
Close #1

'------------ Anzahl Zeilen ermitteln ------------------------------
'1. Öffnen der Datei
'Den Namen und Pfad bitte anpassen
Open ReadFile For Input As #1
'Die Anzahl ist nötig um die Grösse des Arrays zu deklarieren
'Zähler auf 0 setzen
txtlines = 0
Do While Not EOF(1)    ' Schleife bis Dateiende.
    Line Input #1, Text1    ' Hilfsvariable zum einlesen verwenden
    'Zähler hochzählen
    txtlines = txtlines + 1
Loop
'Schliessen der Datei weil Dateiende erreicht wurde
Close #1

'------------- Daten in eine Array-Variable einlesen ---------------
'Erneutes Öffnen um zum Dateianfang zu kommen
Open ReadFile For Input As #1    ' Datei zum Einlesen öffnen.
'Array neu auf die Anzahl der Linien initialisieren
ReDim textArr(txtlines)
If txtlines <= 32000 Then
    'Einlesen der Dateien in das Array
    For i = 0 To txtlines - 1
        Line Input #1, textArr(i)
    Next i
Else
    MsgBox "Da Datenmenge über 32000 Zeilen, wird nur jeder 2. Wert eingelesen", vbInformation, "Info..."
    'Einlesen der Dateien in das Array
    For i = 0 To txtlines - 1 Step 2
        Line Input #1, textArr(i)
    Next i
End If
Close #1

Application.ScreenUpdating = False

'Arbeitsmappe erstellen und zuweisen
Set WorkbookName = ActiveWorkbook

'Namen vergeben
Worksheets(1).Name = "Auswertung von Zeile 1"
ActiveSheetName = WorkbookName.Worksheets(1).Name
'Daten in aktuelles Sheet schreiben
n = 1

'------------- Daten in Tabellenblätter eintragen ---------------
If txtlines <= 32000 Then
    For i = 1 To txtlines
        Application.StatusBar = "Datensatz " & i & " von " & txtlines & " wird eingelesen"
        
        'Neue Tabelle anlegen wenn Zelle 65536 erreicht wurde
        If n Mod 65536 = 0 Then
        
            Anzahl_Blätter = Anzahl_Blätter + 1
            
            Application.StatusBar = "Datentrennung wird vorgenommen"
            dataFitting = False
            WorkbookName.Worksheets.Add After:=ActiveSheet
            ActiveSheet.Name = "Auswertung von Zeile " & i
            ActiveSheetName = ActiveSheet.Name
            
            Sheets(Anzahl_Blätter - 1).Range("A65425:A65536").Copy Destination:= _
            Sheets("Auswertung von Zeile " & i).Range("A1")
            
            n = Sheets("Auswertung von Zeile " & i).Range("A65536").End(xlUp).Offset(1, 0).Row
            
        End If
        'Text aus Array auslesen und eintragen
        WorkbookName.Worksheets(ActiveSheetName).Cells(n, 1) = textArr(i)
        n = n + 1
    Next i
Else
    For i = 1 To txtlines Step 2
        Application.StatusBar = "Datensatz " & i & " von " & txtlines & " wird eingelesen"
        
        'Neue Tabelle anlegen wenn Zelle 65536 erreicht wurde
        If n Mod 65536 = 0 Then
        
            Anzahl_Blätter = Anzahl_Blätter + 1
            
            Application.StatusBar = "Datentrennung wird vorgenommen"
            dataFitting = False
            WorkbookName.Worksheets.Add After:=ActiveSheet
            ActiveSheet.Name = "Auswertung von Zeile " & i
            ActiveSheetName = ActiveSheet.Name
            
            Sheets(Anzahl_Blätter - 1).Range("A65425:A65536").Copy Destination:= _
            Sheets("Auswertung von Zeile " & i).Range("A1")
            
            n = Sheets("Auswertung von Zeile " & i).Range("A65536").End(xlUp).Offset(1, 0).Row
            
        End If
        'Text aus Array auslesen und eintragen
        WorkbookName.Worksheets(ActiveSheetName).Cells(n, 1) = textArr(i - 1)
        n = n + 1
    Next i
End If
End Sub[/b]


Ich hoffe, Du kommst klar.

Solltest Du nicht wissen, wie Du den Code in Deine Datei bekommst, dann schau mal auf meiner HP in der Rubrik Anleitungen und dort dann in der Anleitungsnummer 3 nach. Dort stelle ich dazu eine bebilderte Anleitung zur Verfügung, die Dir sicherlich helfen wird.

Bei Fragen melde Dich.

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Ähnliche Themen

In einer Zeile in Excel eine Datei hinterlegen
frabias  12.01.2007 - 116 Hits - 2 Antworten

Mehrere Dateien umbenennen mit Nummerierung
Iscitürk  18.08.2007 - 171 Hits - 2 Antworten

txt - Datei
Andrea26  16.01.2008 - 82 Hits - 3 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026