Excel VBA Vergleichen von Artikelnummern in 2 Tabellenblättern

Semml77

Grünschnabel
Hallo zusammen,

ich möchte in ein bestehendes Makro ein Modul einbauen um einen Check auszuführen. Komme aber nicht weiter.

Im Arbeitsblatt "Auftrag" stehen ab Zelle C8 untereinander verschieden viele Artikelnummern. Im Blatt "Ergebnis" werden auch Artikelnummern angezeigt (auch teilweise doppelt ab "D6").

Jetzt soll gecheckt werden, ob auch wirklich alle Artikelnummern aus dem Blatt "Auftrag" auch in dem "Ergebnis" mind. einmal vorkommen.

Wenn ja soll die Meldung kommen "alle sind da", wenn nicht "Achtung. Es können ein oder mehrere Artikel im Ergebnis fehlen" oder so ähnlich.

Bis jetzt habe ich das hier zusammengeschustert, allerdings wird nur der erste Artikel "C8" gecheckt. Ich brauch noch ne schleife dass alle Artikel gecheckt werden. Da die Anzahl in Spalte C verschieden ist müsste hier die letzte gefüllte Zeile gesucht werden.
Code:
Sub Ergebnis_Check()

Sheets("Ergebnis").Activate
   
  Dim ErgebMatrix As Range
  Dim AufMatrix As String

AufMatrix = Worksheets("Auftrag").Range("C8").Text

If AufMatrix = "" Then Exit Sub


Set ErgebMatrix = ActiveSheet.Range("D:D").Find(AufMatrix)


If Not ErgebMatrix Is Nothing Then
MsgBox "Alle Artikel des Auftrags werden im Ergebnis reflektiert"

Else
MsgBox "Achtung! Nicht alle Artikel werden im Ergebnis reflektiert."



End If
Set ErgebMatrix = Nothing

End Sub

Wer erbarmt sich meiner :)

Danke schon mal,
Semml77
 
Zuletzt bearbeitet von einem Moderator:
@moderator
Vielen dank für das "einpacken" in ein Fenster :) Der Smiley im Code war da nicht gewollt, wusste aber nicht wie das "einpacken" geht.

@all
Keiner eine Ahnung wie ich vorgehen könnte?
 
So auf die schnelle und ungetestet

Visual Basic:
Sub Ergebnis_Check()    
    Dim wsAuftrag As Worksheet  'Worksheet mit den Aufträgen
    Dim rngErgebnis As Range    'Range in dem gesucht werden soll'
    Dim rowNr As Long           'Zeilennummer
    Dim colNr As Long           'Spaltennummer

    Set wsAuftrag =  Worksheets("Auftrag")
    Set rngErgebnis = Worksheets("Ergebnis").Range("D:D")

    rowNr = 8
    colNr = 4 'D

    'Schleife ausführen solange Daten gefunden werden
    Do While wsAuftrag.Cells(rowNr, colNr).Text <> ""
        'Text im rngErgebnis suchen
        If rngErgebnis.Find(wsAuftrag.Cells(rowNr, colNr).Text) is Nothing Then
            'Eintrag wurde nicht gefunen. Fehlermeldung ausgeben und Sub abbrechen
            MsgBox "Achtung! Nicht alle Artikel werden im Ergebnis reflektiert."
            Goto Exit_Handler
        End IF
        'Nächste Zeile
        rowNr = rowNr + 1
    Loop

    'Der Loop wurde nicht vorgängig verlassen. Positive Meldung zurückgeben
    MsgBox "Alle Artikel des Auftrags werden im Ergebnis reflektiert" 
     
Exit_Handler:
    Set wsAuftrag = Nothing
    Set rngErgebnis = Nothing     
End Sub
 
Kannst du vielleicht sagen wie ich mir in der Message Box noch die Zelle anzeigen lassen kann die er nicht findet?

So: " & rngErgebnis.Find.Address & "!"

update: funktioniert leider nicht
 
Zuletzt bearbeitet:
Du hast da ja die Variable rowNr im der die Zeile steht
Visual Basic:
MsgBox "Artikel " & wsAuftrag.Cells(rowNr, colNr).Text & " in Zeile " & rowNr & " nicht gefunden"
 
Zurück