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

CSV-Import

Forumthread: CSV-Import

CSV-Import
27.03.2024 11:08:43
Markus K.
Guten Tag zusammen,

ich möchte eine csv-Datei in ein Excel-Sheet importieren und grundsätzlich ist die Herangehensweise klar (zumindest funktioniert der Import schon mal).
Der Import soll täglich ausgeführt werden, das sich die csv-Datei täglich erweitert.
Ein kleiner Ausschnitt der csv-Datei:

Position Form Artmat image article variant
1 BEN 11-17101-01 1117101 11-17101 '01
2 BEN 11-17101-07 1117101 11-17101 '07
3 DINO 11-23301-12 1123301 11-23301 '12
4 DINO 11-23301-14 1123301 11-23301 '14
5 DINO 11-23302-12 1123302 11-23302 '12
6 DINO 11-23302-17 1123302 11-23302 '17
7 FINN 11-24304-01 1124304 11-24304 '01

Das tägliche Update der csv-Datei umfasst weitere Artikel und zugehörige Varianten, die dann natürlich beim Einlesen einsortiert werden sollen.

Ich hätte jetzt im Excel-Sheet jetzt gerne folgende Liste nach dem Import:
In Spalte 1 sollen die Artikel (11-17101 usw.) untereinander stehen und jeweils unter dem Artikel die Varianten (01, 07 usw.) dazu.
11-17101
01
07
11-23301
12
14
11-23302
12
17
11-24304
01
usw...

Ich habe wie gesagt den Import soweit, dass mir die Auflistung wie oben gezeigt angelegt wird, allerdings nicht mit den kurzen Varianten-Nummern unter dem jeweiligen Artikel, sondern in der langen Version, also so:
11-17101-01
11-17101-07
11-23301-12
11-23301-14
11-23302-12
11-23302-17
11-24304-01

Ein Lösungsansatz, wie ich zum gewünschten Ergebnis komme, wäre schön, eventuell müsste ich meinen Code auch nur geringfügig ändern.
Sub import_new_csv()

Dim zeilen As String, stext() As String, form As String, variante As String, temp_artikel As String, artmat As String, check_artikel As String
Dim i As Integer, index_form As Integer, index_article As Integer, index_artmat As Integer, index_variant As Integer, next_row As Integer, nächster As Integer

pfad_artikelliste = ThisWorkbook.Path
name_artikelliste = ThisWorkbook.Name
Actual_File_Name = ActiveWorkbook.Name

pfad_csv = "C:\Dokumente\CSV\"
name_csv = "N0107619_ara_Fotobuch_Daten_Export.csv"
check_artikel = "check"

' Datei für Import öffnen
Open pfad_csv & name_csv For Input As #1
While Not EOF(1)
Line Input #1, zeilen

' erste Zeile
If Left(zeilen, 8) = "Position" Then
stext = Split(zeilen, ";")
For i = LBound(stext) To UBound(stext)
' Index für Form
If stext(i) = "Form" Then
index_form = i
End If

' Index für Artikel
If stext(i) = "article" Then
index_article = i
End If

' Index für Variante
If stext(i) = "variant" Then
index_variant = i
End If

' Index für Artmat
If stext(i) = "Artmat" Then
index_artmat = i
End If
Next i
End If

' alle weiteren Zeilen mit Daten
If Left(zeilen, 8) > "Position" Then
stext = Split(zeilen, ";")
temp_artikel = Replace(stext(index_article), """", "")

form = Replace(stext(index_form), """", "")
variante = Replace(stext(index_variant), """", "")
artmat = Replace(stext(index_artmat), """", "")
End If

Application.Windows(Actual_File_Name).Activate
next_row = 5

'Set finden = Cells.Find(what:=temp_artikel, after:=ActiveCell, LookIn:=xlFormulas, lookat:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
Set finden = Cells.Find(what:=artmat, after:=ActiveCell, LookIn:=xlFormulas, lookat:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)

If finden Is Nothing Then
nächster = 5

'Do While Tabelle1.Cells(nächster, 1) temp_artikel
Do While Tabelle1.Cells(nächster, 1) artmat
If Tabelle1.Cells(nächster, 1) = "" Then
Exit Do
End If

nächster = nächster + 1
Loop

Cells(nächster, 1).Activate
Tabelle1.Rows(nächster).Insert
'Range("A" & nächster).Value = temp_artikel
Range("A" & nächster).Value = artmat
If check_artikel > temp_artikel And check_artikel > "check" Then
' Rahmen
Range("A" & nächster, "L" & nächster).Borders(xlEdgeTop).LineStyle = xlContinuous
' With Selection.Borders(xlEdgeTop)
' .LineStyle = xlContinuous
' .ColorIndex = xlAutomatic
' .TintAndShade = 0
' .Weight = xlThin
' End With
End If
Else
nächster = 5


End If
If temp_artikel > "" Then
check_artikel = temp_artikel
End If
Wend
Close #1

Tabelle1.Range("date_last_import").Value = DateTime.Date
End Sub


Vielen Dank schonmal füe Eure Hilfe.

Grüße
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: CSV-Import
27.03.2024 12:41:31
schauan
Hallöchen,

ein Ansatz wäre, zu prüfen, ob die "lange" Artikelnummer schon da ist.
Im Prinzip

If Worksheetfunction.CountIf(Range("A1:A"&aktuellezeile,langenummer)>1 then 

Cells(aktuellezeile,1).Value = left(langenummer,2)
Else
Cells(aktuellezeile,1).Value =langenummer
End If


Das wäre dann dort
Range("A" & nächster).Value = artmat
mit Deinen Variablen usw. umzusetzen.

Anzeige
AW: CSV-Import
27.03.2024 14:50:29
Yal
Hallo Makrus,

probiere mit Power Query: https://excelhero.de/power-query/power-query-ganz-einfach-erklaert/

Die Frage der tägliche Aktualisierung muss genauer gestellt werden: gibt es täglich Information die verloren gehen, wenn diese nicht übernommen wurden? Ansonsten braucht man eine Aktualisierung, nur wenn jemand auf die Daten zugreifen möchte.

VG
Yal
Anzeige
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige