Hallo
wie der Kollege schon sagte, es fehlen konkrete Angaben um die Aufgabe Optimal zu lösen. Zum Glück gibt es die Const Anweisungen!
In den Constant Zeilen musst du die Spalten angeben, die in deiner Basisliste und Liste wirklich vorhanden sind. Dann klappt das Makro.
mfg Nobody
Option Explicit
Const BasLfSpa = "B" 'Lieferanten Spalte in Basisliste!!
Const BasBgSpa = "C" 'Belege Spalte in Basisliste
Const LstLfSpa = "B" 'Lieferanten Spalte in LISTE (Zieltabelle)
Const LstBgSpa = "C" 'Belege Spalte in LISTE
Sub Lieferanten_vergleichen()
Dim AC As Range, n As Long
Dim zList As Long, j As Long
Dim LfID As Variant, lz1 As Long
Dim Adr1 As String, rFind As Range
Dim List As Worksheet, Txt As String
Set List = Worksheets("Liste")
With Worksheets("Basisliste")
'LastZell in Spalte A suchen (von unten)
lz1 = List.Cells(Rows.Count, 2).End(xlUp).Row * 1
List.Range("A2:K" & lz1).ClearContents
Application.ScreenUpdating = False
'LastZell in Spalte A suchen (von unten)
lz1 = .Cells(Rows.Count, 2).End(xlUp).Row
zList = 2: n = 0 '1.Zeile in Liste
For Each AC In .Range(BasLfSpa & 2 & ":" & BasLfSpa & lz1)
LfID = AC.Value 'Lieferanten Nummer aus Nasisliste
If InStr(Txt, LfID) Then GoTo nx 'bereits vorhanden?
If AC.Value = Empty Then GoTo nx 'Leere Zellen überspringen
Txt = Txt & ", " & LfID 'Lieferanten in Txt Variable merken
Set rFind = .Columns(BasLfSpa).Find(What:=AC, After:=.Cells(1, BasLfSpa), _
LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByColumns, _
SearchDirection:=xlNext, MatchCase:=False)
If Not rFind Is Nothing Then
Adr1 = rFind.Address 'Lieferant in Liste notieren
List.Cells(zList, LstLfSpa) = .Cells(AC.Row, BasLfSpa)
Do 'Alle Beleger in Liste notieren
List.Cells(zList, LstBgSpa) = .Cells(rFind.Row, BasBgSpa)
zList = zList + 1: n = n + 1
Set rFind = .Columns(BasLfSpa).FindNext(rFind)
Loop Until Adr1 = rFind.Address
nx: End If
Next AC
Application.ScreenUpdating = True
MsgBox n & " Belege aufgelistet"
End With
End Sud
|