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

zwei Zeilen mit gleicher Kopfnummer in einer Zeile

zwei Zeilen mit gleicher Kopfnummer in einer Zeile
24.01.2013 13:16:00
VBA_JGE
Hallo zusammen,
ich möchte gerne eine CSV oder TXT Datei auslesen, was auch soweit schon sehr gut funktioniert! Hier ist aber die Hürde, dass diese Datei auch Zeilen aufweißt, wo die Kopfnummer gleich ist
Beispiel:
40,VBA,27,DRS,CGN,2011-12-05 08:20:00,2011-12-05 09:30:00,,,,,,,
40,VBA,586,CGN,HHH,2011-12-05 10:45:00,2011-12-05 13:05:00,,,,,,,
40,,,,,,,T,TX,0,99,DEM,11,2011-06-08 00:00:03
41,VBA,3951,HHH,DEM,2011-08-07 07:15:00,2011-08-07 09:20:00,,,,,,,
41,,,,,,,Q,Q,0,199,DEM,7,2011-06-08 00:00:03
42,VBA,83,DEM,DEM,2011-10-13 08:20:00,2011-10-13 09:30:00,,,,,,,
42,VBA,954,DEM,DEM,2011-10-13 11:15:00,2011-10-13 13:15:00,,,,,,,
42,,,,,,,L,LX,0,94.99,DEM,6,2011-06-08 00:00:03
44,VAB,27,HHH,HAJ,2012-03-05 08:20:00,2012-03-05 09:30:00,,,,,,,
44,VBA,586,HHH,HHH,2012-03-05 10:45:00,2012-03-05 13:05:00,,,,,,,
44,,,,,,,L,LX,0,109,DEM,18,2011-06-08 00:00:03
Nun möchte ich alle Zeilen welche die gleiche Kopfnummer habe (fortlaufende Zahl) in einer Zeile mit "," getrennt abfangen und einlesen!
kann hierzu jemand etwas an Info beisteuern?
besten Dank vorab

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: zwei Zeilen mit gleicher Kopfnummer in einer Zeile
26.01.2013 13:54:55
fcs
Hallo VBA_JGE,
hier ein Vorschlag für den Import per Makro.
Gruß
Franz
'Makro in einem allgemeinen Modul
Sub Text_Datei_Importieren()
Dim strDaten As String, strDaten2 As String, strMldg
Dim varDaten, intJ As Integer
Dim wbImport As Workbook
Dim wksImport As Worksheet
Dim ZeileImport As Long
Dim varDatei, intFF As Integer
On Error GoTo Fehler
'Datei auswählen
varDatei = Application.GetOpenFilename( _
Filefilter:="text-CSV (*.txt;*.csv),*.txt;*.csv", _
Title:="Bitte Datei mit Importdaten auswählen")
If varDatei = False Then GoTo Fehler
'Ausgabedatei erstellen - hier kann natürlci auch eine vorhandene Datei/Tabelle _
für den Import als Ziel definiert werden.
Set wbImport = Workbooks.Add(Template:=xlWBATWorksheet)
Set wksImport = wbImport.Worksheets(2)
With wksImport
ZeileImport = 1 'unterhalb dieser Zeile werdne die Daten eingetragen
'Zeilen/Splaten fixieren
ActiveSheet.Range("D2").Select
ActiveWindow.FreezePanes = True
End With
Application.ScreenUpdating = False
'Daten aus Textdateien importieren
intFF = FreeFile()
'txt/csv-Datei für Datenimport öffnen
Open varDatei For Input As #intFF
'1. Datenzeile als Datensatz einlesen
Line Input #intFF, strDaten
Do Until EOF(intFF)
'nächste Datenzeile einlesen bis zum Dateiende
Line Input #intFF, strDaten2
'Prüfen, ob Kopfnummer identisch
If VBA.Split(strDaten, ",")(0) = VBA.Split(strDaten2, ",")(0) Then
'Datenzeile an Datensatz anfügen
strDaten = strDaten & Mid(strDaten2, InStr(1, strDaten2, ","))
strDaten2 = ""
Else
'Daten in Tabelle eintragen
ZeileImport = ZeileImport + 1
varDaten = Split(strDaten, ",")
For intJ = 0 To UBound(varDaten)
wksImport.Cells(ZeileImport, intJ + 1).Value = varDaten(intJ)
Next
'Datenzeile in neuen Datensatz übernehmen
strDaten = strDaten2
End If
Loop
Close #intFF 'txt/csv-Datei wieder schliessen
If strDaten  "" Then
'letzten Datensatz eintragen
ZeileImport = ZeileImport + 1
varDaten = Split(strDaten, ",")
For intJ = 0 To UBound(varDaten)
wksImport.Cells(ZeileImport, intJ + 1).Value = varDaten(intJ)
Next
End If
'Spaltenbreite optimieren
With wksImport
.UsedRange.EntireColumn.ColumnWidth = 2
.Columns.AutoFit
End With
Err.Clear
Fehler:
Application.ScreenUpdating = True
With Err
If .Number  0 Then
Select Case .Number
Case 99999
'keine spezifischen Fehler definiert
Case Else
strMldg = "Fehler-Nr.: " & Str(.Number) & vbLf & " wurde ausgelöst in " _
& "Excel-Makro ""Text_Datei_Importieren""" & vbLf & .Description
MsgBox strMldg, vbInformation + vbOKOnly, "Fehler", .HelpFile, .HelpContext
End Select
End If
End With
Close 'alle mit Open geöffneten Dateien schliessen
Set wbImport = Nothing
Set wksImport = Nothing
End Sub

Anzeige
AW: zwei Zeilen mit gleicher Kopfnummer in einer Zeile
26.01.2013 20:12:53
VBA_JGE
Hallo Franz,
herzlichen Dank für Deine Hilfe und dem Vorschlag zum Datenimport via Makro.
Leider bleibt die Funktion ohne Wirkung und es wird folgende Info angezeigt.
https://www.herber.de/bbs/user/83593.zip
***********************
Fehler-Nr.: 9
wurde ausgelöst in Excel-MAkro "Text_DAtei_importieren"
Index außerhalb des gültigen Bereiches
***********************
ANbei das original File und vielen Dank für Deine Hilfe und evenetuell noch einer weiteren Hilfestellung
viele Grüße und Danke
JOern

Anzeige
AW: Import TXT/CSV-Datei mit Bedingungen
27.01.2013 01:46:43
fcs
Hallo Joern,
da gab es jetzt noch 3 kleine Baustellen im Code.
1. Ich hatte versehentlich einen absichtlichen Fehler zum Testen der Fehlerfunktion nicht wieder rückgängig gemacht.
  Set wksImport = wbImport.Worksheets(2)
muss sein:
  Set wksImport = wbImport.Worksheets(1)
2. Das Trenzeichen in deiner txt/csv-Datei ist ";" und nicht "," wie in deinen zuerst gepostetn Beispieldaten.
Hier hab ich eine Variable eingefügt, in der das Trennzechen gesetzt werden kann.
3, Deine CSV-Datei enthält am Ende auch leere Zeilen.
Diese erzeugt beim Splitten kein Array, so dass
VBA.Split(strDaten2, ",")(0)

auch einen Index-Fehler erzeugt.
Nachfolgend das Makro mit entsprechenden Korrekturen/Anpassungen.
Gruß
Franz
'Makro in einem allgemeinen Modul
Sub Text_Datei_Importieren()
Dim strDaten As String, strDaten2 As String, strMldg
Dim varDaten, intJ As Integer, strSep As String
Dim wbImport As Workbook
Dim wksImport As Worksheet
Dim ZeileImport As Long
Dim varDatei, intFF As Integer
On Error GoTo Fehler
strSep = ";" 'Trennzeichen zwischen Datenfeldern
'Datei auswählen
varDatei = Application.GetOpenFilename( _
Filefilter:="text-CSV (*.txt;*.csv),*.txt;*.csv", _
Title:="Bitte Datei mit Importdaten auswählen")
If varDatei = False Then GoTo Fehler
'Ausgabedatei erstellen - hier kann natürlci auch eine vorhandene Datei/Tabelle _
für den Import als Ziel definiert werden.
Set wbImport = Workbooks.Add(Template:=xlWBATWorksheet)
Set wksImport = wbImport.Worksheets(1)
With wksImport
ZeileImport = 1 'unterhalb dieser Zeile werdne die Daten eingetragen
'Zeilen/Splaten fixieren
ActiveSheet.Range("D2").Select
ActiveWindow.FreezePanes = True
End With
Application.ScreenUpdating = False
'Daten aus Textdateien importieren
intFF = FreeFile()
'txt/csv-Datei für Datenimport öffnen
Open varDatei For Input As #intFF
'1. Datenzeile als Datensatz einlesen
Do Until strDaten  ""
Line Input #intFF, strDaten
If EOF(intFF) Then GoTo Close_Datei
Loop
Do Until EOF(intFF)
'nächste Datenzeile einlesen bis zum Dateiende
Line Input #intFF, strDaten2
'Prüfen, ob Datenzeile leer
If strDaten2  "" Then
'Prüfen, ob Kopfnummer identisch
If VBA.Split(strDaten, strSep)(0) = VBA.Split(strDaten2, strSep)(0) Then
'Datenzeile an Datensatz anfügen
strDaten = strDaten & Mid(strDaten2, InStr(1, strDaten2, strSep))
strDaten2 = ""
Else
'Daten in Tabelle eintragen
ZeileImport = ZeileImport + 1
varDaten = Split(strDaten, strSep)
For intJ = 0 To UBound(varDaten)
wksImport.Cells(ZeileImport, intJ + 1).Value = varDaten(intJ)
Next
'Datenzeile in neuen Datensatz übernehmen
strDaten = strDaten2
End If
End If
Loop
Close_Datei:
Close #intFF 'txt/csv-Datei wieder schliessen
If strDaten  "" Then
'letzten Datensatz eintragen
ZeileImport = ZeileImport + 1
varDaten = Split(strDaten, strSep)
For intJ = 0 To UBound(varDaten)
wksImport.Cells(ZeileImport, intJ + 1).Value = varDaten(intJ)
Next
End If
'Spaltenbreite optimieren
With wksImport
.UsedRange.EntireColumn.ColumnWidth = 2
.Columns.AutoFit
End With
Err.Clear
Fehler:
Application.ScreenUpdating = True
With Err
If .Number  0 Then
Select Case .Number
Case 99999
'keine spezifischen Fehler definiert
Case Else
strMldg = "Fehler-Nr.: " & Str(.Number) & vbLf & " wurde ausgelöst in " _
& "Excel-Makro ""Text_Datei_Importieren""" & vbLf & .Description
MsgBox strMldg, vbInformation + vbOKOnly, "Fehler", .HelpFile, .HelpContext
End Select
End If
End With
Close 'alle mit Open geöffneten Dateien schliessen
Set wbImport = Nothing
Set wksImport = Nothing
End Sub

Anzeige

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige