Clever-Excel-Forum

Normale Version: Formel für Pfadimport
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
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