Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
564to568
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
564to568
564to568
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Bestimmte Zeilen einer CSV auslesen

Bestimmte Zeilen einer CSV auslesen
14.02.2005 10:20:08
R.Schmitt
Einen schönen Guten Morgen allerseits,
heute möchte ich aus einer CSV Datei bestimmte Zeilen
auslesen. Am Anfang jeder Zeile befindet sich die Artikel-
nummer.
Nun möchte ich also alle Zeilen mit Artikelnummer kleiner
50 in das erste Arbeitsblatt meiner Datei einlesen. Alle
kleiner 100 in das zweite und so weiter und so fort.
Wie stelle ich das denn an ?
Vielen Dank
R.Schmitt

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bestimmte Zeilen einer CSV auslesen
14.02.2005 11:43:47
Udo
Lies erst alles in ein Blatt und verteile dann, ist so am einfachsten.
Udo
AW: Bestimmte Zeilen einer CSV auslesen
14.02.2005 11:54:39
R.schmitt
Lieber Udo -
gerne - wenn Du mir sagst, wie ich über 300.000 Zeilen
in ein Arbeitsblatt bekomme.
Grüße
R.Schmitt
AW: Bestimmte Zeilen einer CSV auslesen
14.02.2005 12:04:29
Udo
Na ja, du weißt ja wohl selbst, dass das nicht möglich ist, ggf. Access nutzen.
Udo
AW: Bestimmte Zeilen einer CSV auslesen
14.02.2005 12:25:30
R.Schmitt
Lieber Udo,
leider scheidet Access als "Krücke" aus.
Es sollte doch aber möglich sein, per
VBA ein csv einzulesen (soweit bin ich
zumindest schon selbst gekommen).
Nur daran, ihm (dem Rechner) zu sagen,
daß er nur dann einliest, wenn die Zeile
mit einer bestimmten Artiklenummer be -
ginnt hapert es bei mir.
Ich danke Dir
R.Schmitt
Anzeige
AW: Bestimmte Zeilen einer CSV auslesen
14.02.2005 13:52:31
Udo
Wüßte nicht, wie das gehen soll. Hab die Frage als noch offen gekennzeichnet.
Udo
AW: Bestimmte Zeilen einer CSV auslesen
14.02.2005 18:04:52
andre
Hallo R,
mit welchem code hast Du die Datei bisher eingelesen? Poste ihn mal, dann ändern wir das.
Grüße, andre
AW: Bestimmte Zeilen einer CSV auslesen
16.02.2005 09:05:51
R.schmitt
Lieber Andre,
zunächst muß ich an dieser Stelle Udo und dich um Verzeihung
bitten. Erstens handelt es sich bei der Datei um eine .txt
mit Tabstops (was ich wohl vorgestern im "Fieberwahn" ver-
wechselt habe) und zweitens antworte ich erst heute, da ich
vorgestern und gestern flach lag. Mal sehen, ob´s heute
besser geht (schnief)
Anbei der Code mit dem ich bisher eingelesen habe :

Sub Einspielen()
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;C:\Testdaten.txt" _
, Destination:=Range("A1"))
.Name = "Testdaten"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = xlWindows
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1)
.Refresh BackgroundQuery:=False
End With
End Sub

Nun ist die Liste aber deutlich länger als ein Arbeitsblatt
geworden ein Ausriß dieser Liste hier :
https://www.herber.de/bbs/user/18153.txt
Was ich tun möchte, ist alle Zeilen mit Artikel 1 in Blatt1
alle mit Artikel 2 in Blatt2 usw. einlesen.
Ich danke dir schonmal vielmals und wünsche
einen schönen Tag
R.Schmitt
Anzeige
AW: Bestimmte Zeilen einer CSV auslesen
16.02.2005 09:21:34
EtoPHG
Hallo R,
Was Du mit Deinem Code erreichst, ist dass das Query die GESAMTE .csv Datei einliest.
Mit dem Query kannst Du leider die Anzahl der Records nicht beschränken.
Frage ist die Textdatei aus einer DB extrahiert und hast Du au diese DB Zugriff ?
Wenn ja könnstest Du via ODBC und SQL auf diese DB zugreifen und dann die Aufteilung vornehmen. Eine andere Variante ist pro Artikel ein Textfile zu erstellen.
Oder aber mit VBA die Datei in mehrere zu splitten und dann einlesen.
Gruss Hansueli
AW: Bestimmte Zeilen einer CSV auslesen
16.02.2005 10:04:29
R. Schmitt
Lieber Hansueli,
ich habe keinen Zugriff auf die DB sondern bekomme
die Liste as is. Leider scheidet damit dein ODBC/SQL
Ansatz aus.
Bisher hatte ich ja auch nur die Notwendigkeit, die
Liste gesamt einzulesen. Nun (zu lang) muß ich sie
"zerlegen" und daran hakt´s.
Was ich tun will ist völlig richtig, die Liste per
VBA zu zerschnippeln und zwar in Abhängigkeit der
Artikelnummer. Wie gesagt - bis Artikelnr. X in
Blatt 1, bis Artikelnr. Y in Blatt 2 usw.
Any idea ?
Vielen Dank
R.Schmitt
Anzeige
AW: Bestimmte Zeilen einer CSV auslesen
16.02.2005 12:01:23
EtoPHG
Hallo R,
Mit diesem Code könnte es ev. hinhauen.
Passe die Länge der Artikelnummern und ev der Filennamen an.
Option Explicit

Sub EinlesenInTeilen()
Dim sInputFName As String
Dim sOutputFile As String
Dim sOutputFName As String
Dim sInpRecord As String
Dim iLenArtikelNr As Integer
Dim iSplittCnt As Integer
Dim iFileNr As Integer
Dim dRecCnt As Double
Dim dArtikelNr As Double
Dim bOutputOpen As Boolean
sInputFName = "C:\TestGesamt.txt"       'Name der Gesamtdatei
sOutputFile = "C:\Teil"                 'Erster Teil der gesplitteten Files (wird ergänzt mit Laufnummer und .txt)
iLenArtikelNr = 7                       'Länge der Artikelnummer
iSplittCnt = 50                         'Nach N Wert neues Blatt/File
Open sInputFName For Input As #1
While Not EOF(1)
iFileNr = iFileNr + 1
sOutputFName = sOutputFile & Trim(Str(iFileNr)) & ".txt"
Open sOutputFName For Output As #2
bOutputOpen = True
Input #1, sInpRecord
dArtikelNr = Val(Left(sInpRecord, iLenArtikelNr))
While dArtikelNr + iSplittCnt > Val(Left(sInpRecord, iLenArtikelNr)) And Not EOF(1)
Write #2, sInpRecord
Input #1, sInpRecord
Wend
Close #2
bOutputOpen = False
Application.StatusBar = "Output : " & sOutputFName & " Datensätze verarbeitet: " & dRecCnt
Call SplittImport(sOutputFName, iFileNr)
Wend
Close #1
If bOutputOpen Then
Close #2
Call SplittImport(sOutputFName, iFileNr)
End If
End Sub


Sub SplittImport(sFName As String, iNr As Integer)
'   Importiert File erstellt neues Blatt
ActiveWorkbook.Sheets.Add after:=Worksheets(Worksheets.Count)
Sheets(Worksheets.Count).Activate
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & sFName _
, Destination:=ActiveSheet.Range("A1"))
.Name = "Test" & Trim(Str(iNr))
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = xlWindows
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1)
.Refresh BackgroundQuery:=False
End With
End Sub

Gruss Hansueli
Anzeige
AW: Bestimmte Zeilen einer CSV auslesen
16.02.2005 12:40:11
R.schmitt
Lieber Hansueli,
anbei das Ergebnis https://www.herber.de/bbs/user/18166.xls
Läuft irgendwie nicht ganz so, wie geplant. Ich habe den
Eindruck, er zerschnippelt die Liste "willkürlich" konnte
aber bisher noch nicht erkennen, warum.
Viele Grüße
R.Schmitt
AW: Bestimmte Zeilen einer CSV auslesen
16.02.2005 13:30:54
EtoPHG
Hallo R,
OK, den Code hab ich nur mal schnell während meiner regulären Arbeit hingebastelt.
Also so wie's aussieht ist Deine Artikelnummer, das 2te Feld (ab Position 3 im Record) und ist 6 stellig. Der folgende Code trägt dem Rechnung, zudem splittet er nun in Gruppen von 50 (d.h. wenn die Artikelnummer in 50er Schritten in den letzten beiden Zahlen wechselt). Ich weiss ja nicht wie Deine Artikelnummer aufgebaut ist, aber mit dem Wert der Variablen iSplittCnt lässt sich dass einstellen.
Option Explicit

Sub EinlesenInTeilen()
Dim sInputFName As String
Dim sOutputFile As String
Dim sOutputFName As String
Dim sInpRecord As String
Dim iLenArtikelNr As Integer
Dim iPosArtikelNr As Integer
Dim iSplittCnt As Integer
Dim iFileNr As Integer
Dim dRecCnt As Double
Dim dArtikelNr As Double
Dim bOutputOpen As Boolean
sInputFName = "C:\TestGesamt.txt"       'Name der Gesamtdatei
sOutputFile = "C:\Teil"                 'Erster Teil der gesplitteten Files (wird ergänzt mit Laufnummer und .txt)
iPosArtikelNr = 3                       'Position der Artikelnummer im Record
iLenArtikelNr = 6                       'Länge der Artikelnummer
iSplittCnt = 50                         'Nach N Wert neues Blatt/File
Open sInputFName For Input As #1
While Not EOF(1)
iFileNr = iFileNr + 1
sOutputFName = sOutputFile & Trim(Str(iFileNr)) & ".txt"
Open sOutputFName For Output As #2
If Len(sInpRecord) > 0 Then Write #2, sInpRecord
bOutputOpen = True
Input #1, sInpRecord
While iSplittCnt * iFileNr > Val(Mid(sInpRecord, iPosArtikelNr, iLenArtikelNr)) And Not EOF(1)
Write #2, sInpRecord
Input #1, sInpRecord
Wend
Close #2
bOutputOpen = False
Application.StatusBar = "Output : " & sOutputFName & " Datensätze verarbeitet: " & dRecCnt
Call SplittImport(sOutputFName, iFileNr)
Wend
Close #1
If bOutputOpen Then
Close #2
Call SplittImport(sOutputFName, iFileNr)
End If
End Sub


Sub SplittImport(sFName As String, iNr As Integer)
'   Importiert File erstellt neues Blatt
ActiveWorkbook.Sheets.Add after:=Worksheets(Worksheets.Count)
Sheets(Worksheets.Count).Activate
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & sFName _
, Destination:=ActiveSheet.Range("A1"))
.Name = "Test" & Trim(Str(iNr))
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = xlWindows
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1)
.Refresh BackgroundQuery:=False
End With
End Sub

Hoffe das ist jetzt ein Gerüst, mit dem Du weiterarbeiten kannst.
Gruss Hansueli
Anzeige
Mit iLenArtikelNr = 5 schon besser
16.02.2005 12:47:42
R.schmitt
Mit iLenArtikelNr = 5 findet zumindest schonmal ein
Wechsel bei jeder neuen Artikelnummer statt.
Das Ergebnis sieht jedoch immer noch so aus, daß alle
Werte in ein und der selben Zelle stehen.
Was müßte ich den tun, um einen Blattwechsel nur bei
bestimmten Artikelnummern zu erhalten.
Also Artikelnr. 1 bis 10 in Blatt1 und 11 bis 12 in
Blatt 2 ?
Viele Grüße
R.Schmitt
...siehe letzte Meldung (o.T.)
16.02.2005 13:46:19
EtoPHG

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige