Microsoft Excel

Herbers Excel/VBA-Archiv

Innere Schleife verlassen wenn

Betrifft: Innere Schleife verlassen wenn von: Timo
Geschrieben am: 15.10.2020 14:51:09

Hallo zusammen,
ich stehe auf dem Schlauch. Vllt kann jmd helfen.
Mein Makro vergleicht die Spalte A von Tabelle1 mit der Spalte A von Tabelle2.
Für jede Zeile der Spalte A aus Tabelle 1 soll geprüft werden, ob dieser Wert in Spalte A der Tabelle2 vorhanden ist. Wenn alle Zeilen durchlaufen sind und keine Übereinstimmung gefunden, dann soll der Wert in eine Tabelle3 übertragen werden (hier sammel ich die Werte ohne Übereinstimmung).
Leider habe ich einen Fehler gemacht, finde ihn aber nicht.

Sub Abgleich()

Dim zeile1 As Variant
Dim zeile2 As Variant
Dim erstefreiezeile As Variant

Dim t1 As String
Dim t2 As String

    erstefreiezeile = Sheets("Tabelle3").Cells(1048576, 1).End(xlUp).Row + 1
    t1 = "Tabelle1"
    t2 = "Tabelle2"

    For zeile1 = 7 To 100
        For zeile2 = 2 To 80
            If Sheets(t1).Cells(zeile1, 1).Value = Sheets(t2).Cells(zeile2, 1) Then
            Else
            Sheets(t1).Cells(zeile1, 1).Copy Destination:=Sheets("Tabelle3").Cells( _
erstefreiezeile, 1)
            End If
        Next zeile1
    Next zeile2
End Sub

Betrifft: AW: Innere Schleife verlassen wenn
von: Gerd L
Geschrieben am: 15.10.2020 15:22:26

Hallo Timo!
Sub Abgleich2()

    Dim zeile1 As Long
    Dim zeile2 As Long
    Dim erstefreiezeile As Long
    Dim t1 As String
    Dim t2 As String
    
    Dim blnvorhanden As Boolean

    erstefreiezeile = Sheets("Tabelle3").Cells(1048576, 1).End(xlUp).Row + 1
    t1 = "Tabelle1"
    t2 = "Tabelle2"

    For zeile1 = 7 To 100
        
            blnvorhanden = False
        
            For zeile2 = 2 To 80
                If Sheets(t1).Cells(zeile1, 1).Value = Sheets(t2).Cells(zeile2, 1) Then
                    blnvorhanden = True
                    Exit For
                End If
            Next zeile2
            
            If Not blnvorhanden Then
                Sheets(t1).Cells(zeile1, 1).Copy Destination:=Sheets("Tabelle3").Cells( _
                erstefreiezeile, 1)
                erstefreizeile = erstefreiezeile + 1
            End If
    Next zeile1
    
End Sub
Kennst du ZÄHLENWENN bzw. Worksheetfunction.CountIf ?

Gruß Gerd

Betrifft: AW: Innere Schleife verlassen wenn
von: Timo
Geschrieben am: 15.10.2020 15:42:15

Hi Gerd, vielen Dank dir!
CountIf kenne ich; bringt mir an der Stelle aber nichts, da ich ja die Werte haben möchte von Nichtübereinstimmungen und nicht die Anzahl von Nichtübereinstimmungen...

Dein Code funktioniert gut. Jedoch schreibt er mir immer nur den letzten Wert einer Nichtübereinstimmung in Tabelle3. Ich möchte aber JEDEN Wert haben, der keine Übereinstimmung findet.
Hast du noch eine Idee? Ich grüble ebenfalls kräftig weiter...

Habe mal eine Beispielmappe angehängt.

https://www.herber.de/bbs/user/140893.xlsm

Betrifft: AW: Innere Schleife verlassen wenn
von: UweD
Geschrieben am: 15.10.2020 15:28:01

Hallo

keine 2 Schleifen
Sub Abgleich()

    Dim zeile As Variant
    Dim efz1 As Variant, efz3 As Variant
    
    Dim t1 As Worksheet, t2 As Worksheet, t3 As Worksheet

    Set t1 = Sheets("Tabelle1")
    Set t2 = Sheets("Tabelle2")
    Set t3 = Sheets("Tabelle3")
    
    efz1 = t1.Cells(t1.Rows.Count, 1).End(xlUp).Row
    efz3 = t3.Cells(t3.Rows.Count, 1).End(xlUp).Row + 1
    
    For zeile = 7 To efz1
    
         If WorksheetFunction.CountIf(t2.Columns(1), t1.Cells(zeile, 1).Value) = 0 Then
            
             t1.Cells(zeile, 1).Copy Destination:=t3.Cells(efz3, 1)
             
             efz3 = efz3 + 1
         End If
    Next zeile
End Sub

LG UweD

Betrifft: AW: Innere Schleife verlassen wenn
von: Timo
Geschrieben am: 15.10.2020 15:47:42

großes Sorry, habe deine letzte Antwort überlesen!

Betrifft: AW: Innere Schleife verlassen wenn
von: Timo
Geschrieben am: 15.10.2020 15:48:45

Und die funkt wie geschmiert. jetzt werde ich versuchen deinen Lösungsweg nachzuvollziehen. Vielen Dank Gerd!

Betrifft: AW: Innere Schleife verlassen wenn
von: UweD
Geschrieben am: 15.10.2020 16:04:00

Hallo nochmal

Es durchsucht Zeilenweise (ab 7 bis zur Letzten), wie oft der jeweilige Wert in der 2. Tabelle in Spalte A vorkommt.

Dabei ist es ja egal in Welcher Zeile.
Bei Anzahl=0 wird kopiert


LG UweD

Betrifft: AW: Innere Schleife verlassen wenn
von: Timo
Geschrieben am: 15.10.2020 16:37:20

Achso, clever. Danke UweD!

Betrifft: AW: Vergleich mit funktionierender Lösung?
von: Sulprobil
Geschrieben am: 16.10.2020 04:56:13

Ohne Gewähr:

https://berndplumhoff.gitbook.io/sulprobil/excel/excel-vba-solutions/sbcomparetwolists