Halo zusammen.
Ich habe ein Problem mit einer Regelerstellung
Hier der Sachverhalt.....
Es gibt die Hauptshop csv, die in einen Onlineshop hochgeladen werden soll....dort stehen 7000 Artikel untereinander. in Spalte B gibt es eine klare Produkt ID zum Beispeil ATI- 6257
In der 2ten CSV steht in Spalte A wieder diese Produkt ID, in Spalte B der Pfad zu dem jeweiligen Produktbild.
Zu den 7000 Produkten gibt es etwa 4000 Bilder, nicht jedes Produkt hat ein Bild.
Wie stelle ich das jetzt so ein, dass Excel Zeile für Zeile prüft, ob es ein passendes Bild gibt ( ID müssenabgeglichen werden)
Hallo
am einfachsten mit einem Find Suchlauf zwischen den beiden Dateien. Dazu das Makro anpassen.
Bei "Mappe2" den Namen der zweiten csv Datei angeben, und für beide Mappen die richtigen Tabellen Namen.
Ich nehme an die ID Nummer steht in Spalte A, sonst muss im Suchlauf die Column angepasst werden.
Das Makro in ein normales Modul kopieren und mit normalem Command Button starten.
mfg Gast 123
Code:
Sub IDNummern_vergleichen()
Dim AC As Range, rFind As Range, lz1, lz2
Dim Sht2 As Worksheet 'Sheet in Datei 2
Set Sht2 = Workbooks("Mappe2").Sheets("Tabelle1")
With ThisWorkbook.Sheets("Tabelle1")
'LastZell in Spalte A suchen
lz1 = .Cells(Rows.Count, 1).End(xlUp).Row
For Each AC In .Range("A1:A" & lz1)
Set rFind = Sht2.Columns(1).Find(What:=AC, After:=[a1], LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)
If Not rFind Is Nothing Then
'in beliebige Spalte "Find" Text notieren
.Cells(AC.Row, "xx") = "Find"
End If
Next AC
End With
End Sub
Zum besseren Verständnis:
CSV 1
A B C D E
Lampe für Aquarium ATI-281254 ATI Lampe weiß 80W 8kg 19%
Lampe für Aquarium ATI-281255 ATI Lampe weiß 54 W 7kg 19%
Csv2
A B
ATI -28254
http://server/Korallenstube/235686-jpg
ATI -28255
http://server/Korallenstube/235692-jpg
Da ich 7000 Artikel habe, möchte ich gerne wissen, wie ich die csv1 verändern kann, dass sich die Pfade hinter die jeweiligen Artikel der csv 1 setzen
Pardon, kleine Fehler Korrektur
Code:
Sub IDNummern_vergleichen()
Dim AC As Range, rFind As Range, lz1, lz2
Dim Sht2 As Worksheet 'Sheet in Datei 2
Set Sht2 = Workbooks("Mappe2").Sheets("Tabelle1")
With ThisWorkbook.Sheets("Tabelle1")
'LastZell in Spalte A suchen, Spalte B löschen
lz1 = .Cells(Rows.Count, 1).End(xlUp).Row
.Range("B2:B" & lz1).ClearContents
For Each AC In .Range("A1:A" & lz1)
Set rFind = Sht2.Columns(1).Find(What:=AC, After:=[a1], LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)
If Not rFind Is Nothing Then
'in Spalte B Bildpfad notieren
If rFind.Offset(0, 1) <> "" Then _
AC.Offset(0, 1) = rFind.Offset(0, 1)
End If
Next AC
End With
End Sub
Nachtrag
soll nur Spalte B automatisch eingefügt werden, oder die ganze Zeile von B bis E??
In dem Fall bitte diesen Code testen. Das Makro muss in die Mappe, die die gesuchten Daten übernimmt.
mfg Gast 123
Code:
Sub IDNummern_vergleichen()
Dim AC As Range, rFind As Range, lz1, lz2
Dim Sht2 As Worksheet 'Sheet in Datei 2
Set Sht2 = Workbooks("Mappe2").Sheets("Tabelle1")
With ThisWorkbook.Sheets("Tabelle1")
'LastZell in Spalte A suchen, Spalte B löschen
lz1 = .Cells(Rows.Count, 1).End(xlUp).Row
.Range("B2:B" & lz1).ClearContents
Application.ScreenUpdating = False
For Each AC In .Range("A1:A" & lz1)
Set rFind = Sht2.Columns(1).Find(What:=AC, After:=[a1], LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)
If Not rFind Is Nothing Then
'in Spalte B-E kopieren
If rFind.Offset(0, 1) <> "" Then
rFind.Offset(0, 1).Resize(1, 4).Copy
AC.Offset(0, 1).PasteSpecial xlPasteValues
Application.CutCopyMode = False
End If
End If
Next AC
End With
End Sub
Es soll nur die Spalte B der csv 2 (also der Bildpfad )in die Zeile hinter den gleichen Artikel (gleiche Artnr.) der csv1
Hallo
das 1. Makro in der Antwort #4 sollte dafür ausreichen. Bitte einfach mal testen.
mfg Gast 123
Zum besseren Verständnis: lade mal beide CSV-Dateien hoch
Code:
Sub M_snb()
With CreateObject("scripting.filesystemobject")
c00 = .opentextfile("G:\OF\datei1.csv").readall
sn = Split(c00, vbCrLf)
sp = Split(.opentextfile("G:\OF\datei2.csv").readall, vbCrLf)
For j = 0 To UBound(sp) - 1
st = Split(sp(j), ";")
c01 = Filter(sn, st(0))(0)
c00 = Replace(c00, c01, c01 & ";" & st(1))
Next
.createtextfile("G:\OF\datei1.csv").write c00
End With
End Sub