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

TXT Import nur bestimmte Zeilen

Forumthread: TXT Import nur bestimmte Zeilen

TXT Import nur bestimmte Zeilen
07.01.2025 17:23:21
toblee
Hallo, ich benötige bitte eure Fachkenntnis. Ich möchte aus einer .txt nur bestimmte Zeilen importieren. Und zwar Zeile 32-62. Die Zeilen verändern sich nicht, nur die Daten. Die Zeilen sollen dann in eine Tabelle ab Zelle C16 nach unten aufgesplittet werden. Getrennt sind sie mit einem ; (Semikolon). Die txt habe ich angehangen, siehe: https://www.herber.de/bbs/user/174731.txt

Ich nutze derzeit diesen Code, siehe unten, weil er sehr sehr schnell ist!, aber hier kann man leider das einzulesende ENDE (also zeile 32 bis 62) nicht deklarieren, sondern nur den Beginn (.TextFileStartRow).

Hätte bitte jemand eine Idee, wie ich das lösen kann? Im besten Fall mit dem selben schnellen Code oder einem vergleichbar schnellen.
Vielen lieben Dank :)

code
Sub import_jan_txt() 'import txt
Application.EnableEvents = False
With ActiveSheet.QueryTables.Add(Connection:="TEXT;C:\Users\dertob\Desktop\Stundenzettel\data\a11.txt", _
Destination:=Range("$C$16"))
.name = ""
.FieldNames = False 'True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlOverwriteCells
.SavePassword = False
.SaveData = False
.AdjustColumnWidth = False
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
Range("C16").Select
End Sub
code ende
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Du könntest auch...
07.01.2025 19:01:42
Case
Moin, :-)

... Power Query nutzen: ;-)
https://www.herber.de/bbs/user/174735.zip

Entpacke die ZIP in einen Ordner. Öffne die "TXT_32_bis_62.xlsx". Die "all.txt" muss so heißen und im gleichen Ornder sein. Der Pfad wird in C1 gelistet. ;-)

Informationen zu PQ:
https://learn.microsoft.com/de-de/power-query/power-query-what-is-power-query
https://support.microsoft.com/de-de/office/hilfe-zu-power-query-f%C3%BCr-excel-2b433a85-ddfb-420b-9cda-fe0e60b82a94
https://excelhero.de/power-query/power-query-ganz-einfach-erklaert/

Servus
Case
Anzeige
AW: Du könntest auch...
07.01.2025 20:44:41
toblee
Danke Case! Allerdings steig ich da nicht durch - ich kann leider nicht erkennen, wie du das gemacht hast, so dass ich es weder replizieren noch anpassen könnte. Ich seh zwar die Formel, aber darin finde ich die Werte Zeile 32 oder 62 nicht wieder. Mit PQ hatte ich bisher nix am Hut. VBA wäre mir lieber 😉 Würdest du es mir daher bitte erklären, was du da gemacht hast? Oder hättest du noch eine VBA Idee? danke danke
Anzeige
AW: Du könntest auch...
07.01.2025 21:34:59
emkaes
Hallo,

teste mal folgendes Makro



Sub AusTextDatei()
Dim arr As Variant
Dim i As Integer
arr = Split(CreateObject("scripting.filesystemobject").OpenTextFile("F:\174731.txt").ReadAll, vbLf)
For i = 32 To 62
Cells(i - 16, 3).Resize(, UBound(Split(arr(i), ";"))).Value = Split(arr(i), ";")
Next

End Sub
Anzeige
Eine Erklärung...
07.01.2025 23:03:24
Case
Moin, :-)

... zu dem was du gefragt hast: ;-)

In C1 habe ich einen Namen vergeben "PfadDatei". Damit lässt sich in Power Query leichter arbeiten (sonst muss man den Pfad jedesmal im M-Code anpassen).

Den M-Code kannst du dir anschauen, wenn du auf "Daten - Abfragen & Verbindungen - Abfragen und Verbindungen" klickst. Dann siehst du rechts im Fenster die Verbindung "174731".

Die kannst du mit der "rechten Maustaste" anklicken und dann "Bearbeiten" auswählen. Dann bist du im PQ-Editor.

Dort sind rechts die "Schritte" aufgelistet - die du durch anklicken einzeln sehen kannst.

Oder du klickst auf "Erweiterter Editor". Dort ist der M-Code:
let    

QuelleD = Excel.CurrentWorkbook(){[Name="PfadDatei"]}[Content]{0}[Column1],
Quelle = Csv.Document(File.Contents(QuelleD),[Delimiter=";", Columns=11, Encoding=1252, QuoteStyle=QuoteStyle.None]),
TypG = Table.TransformColumnTypes(Quelle,{{"Column1", type text}, {"Column2", type text}, {"Column3", type text}, {"Column4", type text}, {"Column5", type text}, {"Column6", type text}, {"Column7", type text}, {"Column8", type text}, {"Column9", type text}, {"Column10", type text}, {"Column11", type text}}),
EntferneOZ = Table.Skip(TypG,31),
Behalte30 = Table.FirstN(EntferneOZ, 30)
in
Behalte30


  • Erst lese ich den Inhalt des Namens aus (für Pfad- und Dateiname).

  • Dann wird die Datei geladen.

  • Die Typen kann man machen, muss man manchmal (z. B. bei Datum).

  • Dann entfernen ich 31 Zeilen von Oben.

  • Nun werden die nächsten 30 Zeilen behalten.


  • Das wars.

    Ist ein sehr mächtiges Tool.

    Servus
    Case

    Anzeige
    AW: Du könntest auch...
    07.01.2025 21:59:13
    toblee
    He emkaes, dein Code funktioniert! Unglaublich!!!
    MEGA D A N K E

    Es gibt nur 3 Merkwürdigkeiten: Ich muss im Code: 31 eingeben, damit er ab Zeile 32 zu lesen beginnt. Ich muss 15 eingeben, damit er ab Celle 16 beginnt einzutragen und ich muss in der txt am Ende jeder Zeile noch ein ; zufügen, sonst lässt er den letzten Datensatz weg. Könntest du das noch erklären oder fixen?
    Anzeige
    AW: Du könntest auch...
    07.01.2025 22:08:30
    emkaes
    Hallo,

    etwa so besser?

    Sub AusTextDatei()
    
    Dim arr As Variant
    Dim i As Integer
    arr = Split(CreateObject("scripting.filesystemobject").OpenTextFile("F:\174731.txt").ReadAll, vbLf)
    For i = 31 To 61
    Cells(i - 15, 3).Resize(, UBound(Split(arr(i) & ";", ";"))).Value = Split(arr(i), ";")
    Next

    End Sub
    Anzeige
    AW: Du könntest auch...
    07.01.2025 22:15:33
    toblee
    He klasse, das ; ist somit gefixt. Einwandfrei, spitzenmäßig!!!

    Danke emkaes und auch case für die Hilfe und noch eine schöne Woche, lg :)
    AW: Du könntest auch...
    07.01.2025 22:13:27
    emkaes
    Hallo,

    wenn du einen String mit SPLIT() aufteilst, entsteht ein Null-basiertes eindimensionales Array. Das hatte ich nicht berücksichtigt

    Also ist die Zeile 32 im Dokument "Zeile" 31 im Array . Daher auch - 15 um die Daten nach Zeile 16 zu schreiben

    Im Array habe ich dann noch durch ' & ";" ' ein Semikolon drangehängt
    Anzeige
    Anzeige
    Anzeige
    Live-Forum - Die aktuellen Beiträge
    Datum
    Titel
    14.05.2026 13:31:09
    14.05.2026 09:50:42
    13.05.2026 19:14:18