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

CSV durchsuchen (InStr?)

CSV durchsuchen (InStr?)
25.10.2012 08:27:02
Manuela
Hallo :)
Ich möchte vor dem einlesen einer CSV prüfen ob in der 1. Zeile ein bestimmtes Wort vorkommt. In einem CSV-Importmakro habe ich versucht dies mit Hilfe von InStr zu realisieren, aber irgendwie funktioniert es nicht... mhhh! Hat jemand eine Idee was hier falsch sein könnte?

Sub CSVImportAufteilen()
'CSV-Import
Dim strSrcFile$, strTmp$, strDelimit$
Dim intFile%, i&, k&, arrSrc
Dim lngLast As Long
'Öffnen-Dialog
strDelimit = ";"
intFile = FreeFile
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = False
.Title = "Datei wählen"
.InitialFileName = ""
.Filters.Add "CSV-Dateien", "*.csv", 1
.Filters.Add "Alle Dateien", "*.*", 2
If .Show Then
strSrcFile = .SelectedItems(1)
End If
End With
' Suche
Dim suche As String
suche = "Bratwurst"
If InStr(1, strSrcFile, suche) > 0 Then
Range("A1").Value = "Gefunden!"
Else
Range("A1").Value = "nicht gefunden!"
End If
'Datenimport
If strSrcFile  "" Then
Open strSrcFile For Input As #intFile
Do While Not EOF(intFile)
Line Input #intFile, strTmp
If lngLast > 0 Then
arrSrc = Split(strTmp, strDelimit)
With ActiveSheet
lngLast = .Cells(Rows.Count, 1).End(xlUp).Row + 1
lngLast = Application.Max(lngLast, 4)
'     ExcelSpalte = CSVSpalte
Cells(lngLast, 1) = arrSrc(0)
Cells(lngLast, 2) = arrSrc(1)
Cells(lngLast, 4) = arrSrc(2)
Cells(lngLast, 5) = arrSrc(3)
End With
End If
lngLast = lngLast + 1
Loop
Close
End If
End Sub
lg,
Manu

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

Betreff
Datum
Anwender
Anzeige
AW: CSV durchsuchen (InStr?)
25.10.2012 09:38:48
Luschi
Hallo Manuela,
Du suchst in Deinem Vba-Code den Suchbegriff nicht in der 1.eingelesenen Zeile sondern im Dateinamen!
Versuch es mal so:

Option Explicit
Sub CSVImportAufteilen()
'CSV-Import
Dim ws As Worksheet
Dim strSrcFile$, strTmp$, strDelimit$
Dim intFile%, i&, k&, arrSrc
Dim lngLast As Long
'Öffnen-Dialog
strDelimit = ";"
intFile = FreeFile
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = False
.Title = "Datei wählen"
.InitialFileName = ""
.Filters.Add "CSV-Dateien", "*.csv", 1
.Filters.Add "Alle Dateien", "*.*", 2
If .Show Then
strSrcFile = .SelectedItems(1)
End If
End With
If strSrcFile  "" Then
' Suche
Dim suche As String
suche = "Bratwurst"
'hier wird lngLast als Zähler für die 1. eingelesene csv-Zeile benutzt
lngLast = 1
Set ws = ThisWorkbook.ActiveSheet
'Datenimport
Open strSrcFile For Input As #intFile
Do While Not EOF(intFile)
Line Input #intFile, strTmp
If lngLast = 1 Then
If InStr(1, strTmp, suche, vbTextCompare) > 0 Then
ws.Range("A1").Value = "Gefunden!"
'jetzt wird lngLast als Zeilenzähler verwendet
lngLast = ws.Cells(Rows.Count, 1).End(xlUp).Row + 1
lngLast = Application.Max(lngLast, 4)
Else
ws.Range("A1").Value = "nicht gefunden!"
'Einlesen sofort beenden, da Suchbegriff in 1. eingelesenen _
Zeile nicht gefunden
Exit Do
End If
End If
arrSrc = Split(strTmp, strDelimit, -1, vbTextCompare)
With ws
'ExcelSpalte = CSVSpalte
.Cells(lngLast, 1).Value = arrSrc(0)
.Cells(lngLast, 2).Value = arrSrc(1)
.Cells(lngLast, 4).Value = arrSrc(2)
.Cells(lngLast, 5).Value = arrSrc(3)
End With
lngLast = lngLast + 1
Loop
Close #intFile
Set ws = Nothing
End If
End Sub
Gruß von Luschi
aus klein-Paris

Anzeige
AW: CSV durchsuchen (InStr?)
25.10.2012 11:50:23
Manuela
Danke Luschi!
Ich bin aber auch n Dösi.. ;-)
Deine Variante funktioniert gut, allerdings wird jetzt beim "Treffer" nicht mehr ab der 2. Zeile importiert wie früher, sondern die 1. auch (Überschriftenzeile). Könntest du mir nochmal einen Tipp geben?
Bei "Treffer" Import ab 2. CSV-Zeile, sonst Import abbrechen.
LG,
Manu

AW: CSV durchsuchen (InStr?)
25.10.2012 12:55:52
Luschi
Hallo Manuela,
versuch es mal so mit der Do-Loop-Schleife:

Do While Not EOF(intFile)
Line Input #intFile, strTmp
If lngLast = 1 Then
If InStr(1, strTmp, suche, vbTextCompare) > 0 Then
ws.Range("A1").Value = "Gefunden!"
'jetzt wird lngLast als Zeilenzähler verwendet
lngLast = ws.Cells(Rows.Count, 1).End(xlUp).Row + 1
lngLast = Application.Max(lngLast, 4)
Else
ws.Range("A1").Value = "nicht gefunden!"
'Einlesen sofort beenden, da Suchbegriff in 1. eingelesenen _
Zeile nicht gefunden
Exit Do
End If
Else
arrSrc = Split(strTmp, strDelimit, -1, vbTextCompare)
With ws
'ExcelSpalte = CSVSpalte
.Cells(lngLast, 1).Value = arrSrc(0)
.Cells(lngLast, 2).Value = arrSrc(1)
.Cells(lngLast, 4).Value = arrSrc(2)
.Cells(lngLast, 5).Value = arrSrc(3)
End With
lngLast = lngLast + 1
End If
Loop
Gruß von Luschi
aus klein-Paris

Anzeige
AW: CSV durchsuchen (InStr?)
25.10.2012 13:10:44
Manuela
Kannst du mir dabei eben helfen? Ich versuch das schon seit 2 Stunden - ohne Erfolg ^.^
LG,
Manu

AW: CSV durchsuchen (InStr?)
25.10.2012 13:32:25
Luschi
Hallo Manuela,
wie meinst Du das jetzt. Du brauchst doch nur in dem meinen 1. Vba-Code die gesamte
Do-Loop-Schleife austauschen; oder soll ich Dir den Gesamt-Code nochmals schicken?
Gruß von Luschi
aus klein-Paris

AW: CSV durchsuchen (InStr?)
25.10.2012 13:57:40
Manuela
Hallo Luschi,
wäre nett wenn du mir deinen Code so anpasst, dass bei gefundenem Suchbegriff nur ab der 2. CSV Zeile importiert wird, weil die 1. nur eine Überschift enthalten ist.
Ich würd' den Code nur kaputtspielen und dann explodiert alles! ;-)
Danke,
Manu

Anzeige
AW: CSV durchsuchen (InStr?)
25.10.2012 14:36:37
Luschi
Hallo Manuela,
hier nochmal die von mir getestete Variante:

Sub CSVImportAufteilen()
'CSV-Import
Dim ws As Worksheet
Dim strSrcFile$, strTmp$, strDelimit$
Dim intFile%       ', i&, k&
Dim arrSrc As Variant
Dim lngLast&
'Öffnen-Dialog
strDelimit = ";"
intFile = FreeFile
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = False
.Title = "Datei wählen"
.InitialFileName = ""
.Filters.Add "CSV-Dateien", "*.csv", 1
.Filters.Add "Alle Dateien", "*.*", 2
If .Show Then
strSrcFile = .SelectedItems(1)
End If
End With
If strSrcFile  "" Then
' Suche
Dim suche As String
suche = "Bratwurst"
'hier wird lngLast als Zähler für die 1. eingelesene csv-Zeile benutzt
lngLast = 1
Set ws = ThisWorkbook.ActiveSheet
'Datenimport
Open strSrcFile For Input As #intFile
Do While Not EOF(intFile)
Line Input #intFile, strTmp
If lngLast = 1 Then
If InStr(1, strTmp, suche, vbTextCompare) > 0 Then
ws.Range("A1").Value = "Gefunden!"
'jetzt wird lngLast als Zeilenzähler verwendet
lngLast = ws.Cells(Rows.Count, 1).End(xlUp).Row + 1
lngLast = Application.Max(lngLast, 4)
Else
ws.Range("A1").Value = "nicht gefunden!"
'Einlesen sofort beenden, da Suchbegriff in 1. eingelesenen _
Zeile nicht gefunden
Exit Do
End If
Else
arrSrc = Split(strTmp, strDelimit, -1, vbTextCompare)
With ws
'ExcelSpalte = CSVSpalte
.Cells(lngLast, 1).Value = arrSrc(0)
.Cells(lngLast, 2).Value = arrSrc(1)
.Cells(lngLast, 4).Value = arrSrc(2)
.Cells(lngLast, 5).Value = arrSrc(3)
End With
lngLast = lngLast + 1
End If
Loop
''csv-Datei schließen!
Close #intFile
Set ws = Nothing
End If
End Sub
Gruß von Luschi
aus klein-Paris
PS: Die Variable 'lngLast' besitzt nur vor dem Einlesen den Wert '1'. Dadurch, das das Schreiben
der Werte in die Excel-Tabelle im Else-Zweig geschieht (also lngLast 1), wird die erste
eingelesene Zeile nicht geschrieben.

Anzeige
Danke!
29.10.2012 06:42:48
Manuela
Vielen Dank Luschi. Läuft wunderbar!
LG,
Manu

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige