VBA- Aus mehrere CSV Datein Suchwert finden um dann Ganze Zeile in Excel auszugeben
#1
Hallo VBA Experten Blush

ich bin VBA Anfänger und brauche etwas Hilfe Blush Blush
Ich benötigte ein Programm, der mir anhand einer Suchfunktion die ganze Zeile einer CSV Datei ausgibt.

Ich habe einen Archivordner, dort befinden sich mehrere CSV Dateien. In den einzelnen CSV Dateien sind mehrere Zeilen (>10000).
Die CSV Dateien sind alle gleich aufgebaut, nur mit andere Werte.

BSP Aufbau einer CSV DATEI :
Zeile 1: A1;A2;A3;$A4;;A5;A6;$A7;$A8;A9;A10;A11;A12;A13;A14;$A15;A16;
Zeile 2: B1;B2;B3;$B4;;B5;B6;$B7;B8;B9;$B10;B11;$B12;
Zeile 3: C1;C2;C3;$B4;;$C5;$C6;C7;C8;C9;$C10;$C11;$C12;$C13;
....
Das Programm sollte mich beim Starten nach dem Suchbegriff fragen. Das Programm sollte dann Automatisch im Archivordner durch alle CSV Dateien suchen.
Das Suchbegriff befindet sich immer an der dritten Stelle (Bsp.: A3, B3, C3) einer Zeile.
Das Programm muss alle CSV Dateien in den Archivordner durchsuchen und mir die Zeile ausgeben, aus der entsprechende CSV Datei mit den Suchbegriff.

Als letztes muss dann, die gesuchte Zeile in einer EXCEL Tabelle ab Zeile 13 ausgegeben werden.
Dabei sollte für jeden ";" und "$" gesplittet werden.
Für jeden ";" kommt der nächste Wert in der nächste Spalte der EXCEL TABELLE.
Für jeden "$" Zeile kommt der nächste Wert in einer neuen Zeile der EXCEL TABELLE.
Außerdem sollte in B5 der Name der CSV. Datei stehen i der das Suchbegriff sich befindet.
Falls der Suchbegriff nicht in den CSV Dateien existiert, soll eine MSG Box erscheinen mit: "Suchbegriff nicht gefunden!"

Was mein Programm tut:
- gibt mir die alle Zeilen der entsprechenden CSV Datei ab, gesplittet... Huh
Was ich möchte:
- nur die gesuchte Zeile gesplittet ... ab Zeile 13 Blush

Ich hoffe ihr Könnt mir helfen Blush Blush Blush


Mein Programm:

Code:
Sub Pro1_Test()


Dim sPath As String
Dim sSearchPath As String
Dim FileName As String
Dim InputData
Dim Tmp
Dim Tmpp
Dim vTmp As Variant
Dim vTmpp As Variant
Dim str As Variant
Dim vnt As Variant
Dim such As String
Dim i As Long

'###############################################################################
' Folgende Anweisung löscht den Inhalt der aktiven Tabelle
ActiveSheet.Cells.ClearContents

'Frage nach den Suchbegriff
such = InputBox("Geben Sie den Suchbegriff ein:", "Suche...")
such = Replace(such, " ", "") ' Leerzeichen entfernen
If such = "" Then Exit Sub ' Bei Abbrechen Prog. sofort beenden

' Suche in alle .CSV Dateien
sSearchPath = "N:ArchivArchiv12*.csv"
sPath = "N:ArchivArchiv12"
FileName = Dir(sSearchPath)

vnt = "NEIN"
If FileName <> "" Then
Do While FileName <> ""
Open sPath & FileName For Input As #1
Do While Not EOF(1)
Line Input #1, InputData

' Zeile mit Suchwort gefunden

If InStr(1, InputData, such) > 0 Then
vnt = "JA"
arr = split(InputData, vbCrLf)
vTmp = split(arr(i), "$")
For i = 0 To UBound(vTmp) - 1

If Len(vTmp(i)) > 0 Then
str = split(vTmp(i), ";")
Range(Cells(i + 13, 1), Cells(i + 13, UBound(str))) = str
Range("B7") = FileName
End If
Next

End If
Loop
Close #1
FileName = Dir ' nächste Datei durchsuchen
Loop
End If

If vnt = "NEIN" Then
MsgBox "Suchbegriff nicht gefunden!"
End If

End Sub
Top
#2
Hallo,

ich würde mich mit dem Thema PowerQuery beschäftigen. Damit sollte das Einlesen der Dateien ganz gut klappen.
Gruß
Michael
Top
#3
Hallo Michael,

erst mal vielen lieben Dank für deine Antwort!
Ich habe mir das angesehen und mich ein wenig mit das Thema  PowerQuery beschäftigt.

Allerdings, würde ich gerne mein Problem mit VBA lösen. Ich habe viel Zeit investiert mein Programm zu schreiben und es wäre ein wenig schade.
Bisher macht mein Programm ziemlich viel, er schafft aus einen großen Ordner mit vielen CSV Dateien die richtige auszufischen.  
Allerdings brauche ich nur eine einzelne Zeile bzw. die mit dem gesuchten Wert.
Während mein Programm die ganze Datei mit ausgibt.

 Hättest du vielleicht ein anderen Vorschlag, wie ich das mit VBA lösen könnte ?
Ich bin für jeden Tipp sehr dankbar =) Blush Blush Blush
Top
#4
Hallo,

wieviel Foren beschäftigst Du noch mit Deinem Problem?

https://www.ms-office-forum.net/forum/sh...p?t=353298
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Top
#5
Hallo BoskoBiati,


anscheinend keinen da ich immer noch keine Antwort oder Verbesserungsvorschlag auf meinen Problem habe Idea Exclamation
Top
#6
Hi

schau mal ob dir das weiterhilft.
http://www.clever-excel-forum.de/Thread-...n-auslesen

Gruß Elxe
Top
#7
Also mir ist leider noch nicht ganz klar, wie die konkrete Lösung aussehen soll.

Am besten wäre eine Beispieldatei samt zwei oder 3 csv-Dateien mit dem entsprechenden Wunschergebnis.
Gruß
Michael
Top
#8
(27.07.2018, 12:13)Der Steuerfuzzi schrieb: Hallo,

ich würde mich mit dem Thema PowerQuery beschäftigen. Damit sollte das Einlesen der Dateien ganz gut klappen.

Hallo, das wird hier bei dem TE nicht gehen...!!!
Gruß Jörg
stolzes Mitglied im ----Excel-Verein
Freund einer excellenten Power Query-Abfrage
Top
#9
(30.07.2018, 13:48)lulu183 schrieb: Hallo Michael,

erst mal vielen lieben Dank für deine Antwort!
Ich habe mir das angesehen und mich ein wenig mit das Thema  PowerQuery beschäftigt.

...

Hallo, Power Query gibt's erst ab XL2010...
Gruß Jörg
stolzes Mitglied im ----Excel-Verein
Freund einer excellenten Power Query-Abfrage
Top
#10
Beispiel für CSV:

A;23072011;SchuelerID1;$Deutsch;5.1;;;100;10;$Bio;10.1;3,2;;80;22;$Erdkunde;1.1;6;0;90;5;99
B;14052013;SchuelerID2;$Mathe;2.5;1.0;;30;15;$POWI;1.5;4,0;;95;17;$Erdkunde;1.18;4,3;
Suchfunktion: Suche nach der SchülerID.

Bespiel Ergebnis für SchülerID1

Spalte A      Spalte B          Spalte C        Spalte D      Spalte E        Spalte F       Spalte G     
A               23072011      SchuelerID
Deutsch       5.1                                                         100                10
Bio              10.1             3,2                                        80                 22
Erdkunde       1.1            6;                         0                90                   5             99



Bespiel Ergebnis für SchülerID2
Spalte A      Spalte B          Spalte C        Spalte D      Spalte E        Spalte F       Spalte G  
B               14052013        SchuelerID2
Mathe           2.5                   1.0                               30                    15
POWI           1.5                    4,0                              95                     17
Erdkunde     1.18                   4,3
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste