Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Makro nur bei eingeblendeten Zeilen ausführen

Makro nur bei eingeblendeten Zeilen ausführen
08.04.2015 21:00:47
Rolf
Hallo zusammen
Mit nachstehendem Code (den ich von hier habe, besten dank!) werden Zeilen miteinander verglichen und bei Änderungen (= ungleicher Wert) farbig markiert.

Dim lzVergleich As Long
lzVergleich = Cells(Rows.Count, "A").End(xlUp).Row
Dim spVergleich As Long
spVergleich = Cells(5, Columns.Count).End(xlToLeft).Column
Dim r, c As Integer 'r = Zeile, c = Spalte
For r = 6 To lzVergleich
With Sheets("Tabelle1")
If .Cells(r, 5).Value = .Cells(r + 1, 5).Value Then
For c = 4 To spVergleich
If .Cells(r, c).Value  .Cells(r + 1, c).Value Then
.Cells(r + 1, c).Interior.Color = 255
End If
Next
End If
End With
Next
Mein Problem ist nun, dass die Datenbank recht gross wurde und es mit diesem Code immer die kompletten Daten miteinander abgleicht. Dies ist nicht nötig. Es soll daher nur die gefilterten Zeilen vergleichen und die ausgefilterten/ausgeblendeten ignorieren. Wie bekomme ich das hin?
Dass die relevanten Daten eingeblendet bzw. die irelevanten Daten ausgeblende sind, regle ich mit einem separaten vorgängigen Makro.
Danke für deine Hilfe!
Grüsse
Rolf

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro nur bei eingeblendeten Zeilen ausführen
08.04.2015 21:32:54
Nepumuk
Hallo,
so besser?
Public Sub Test()
    
    Dim spVergleich As Long
    Dim r As Long, c As Long 'r = Zeile, c = Spalte
    
    With Sheets("Tabelle1")
        
        spVergleich = .Cells(5, .Columns.Count).End(xlToLeft).Column
        
        For r = 6 To .Cells(.Rows.Count, 1).End(xlUp).Row
            
            If Not .Rows(r).Hidden Then
                
                If .Cells(r, 5).Value = .Cells(r + 1, 5).Value Then
                    
                    For c = 4 To spVergleich
                        
                        If .Cells(r, c).Value <> .Cells(r + 1, c).Value Then _
                            .Cells(r + 1, c).Interior.Color = 255
                        
                    Next
                End If
            End If
        Next
    End With
End Sub

Gruß
Nepumuk

Anzeige
AW: Makro nur bei eingeblendeten Zeilen ausführen
08.04.2015 21:49:42
Rolf
Hi Nepumuk
Funktioniert - Danke!!
Nun muss ich es nur noch schaffen, dass er, sobald er in einer Zeile ein Feld farbig markiert, in der Spalte B das Wort "Neu" schreibt und in der darüberliegenden Zeile (in derjenigen Zeile, die als Vergleich diente) ebenfalls in der Spalte B das wort "Bisher" schreibt.
Bringen wir das auch noch hin? Dann bin ich nämlich meinem Ziel extrem nahe und den Rest sollte ich selber hinbekommen....
Vielen Dank!!
Grüsse
Rolf

AW: Makro nur bei eingeblendeten Zeilen ausführen
08.04.2015 21:54:02
Nepumuk
Hallo,
wir? Achso, klar du musst schließlich kopieren.
Public Sub Test()
    
    Dim spVergleich As Long
    Dim r As Long, c As Long 'r = Zeile, c = Spalte
    
    With Sheets("Tabelle1")
        
        spVergleich = .Cells(5, .Columns.Count).End(xlToLeft).Column
        
        For r = 6 To .Cells(.Rows.Count, 1).End(xlUp).Row
            
            If Not .Rows(r).Hidden Then
                
                If .Cells(r, 5).Value = .Cells(r + 1, 5).Value Then
                    
                    For c = 4 To spVergleich
                        
                        If .Cells(r, c).Value <> .Cells(r + 1, c).Value Then
                            
                            .Cells(r, 2).Value = "Bisher"
                            .Cells(r + 1, 2).Value = "Neu"
                            .Cells(r + 1, c).Interior.Color = vbRed
                            
                        End If
                    Next
                End If
            End If
        Next
    End With
End Sub

Gruß
Nepumuk

Anzeige
AW: Makro nur bei eingeblendeten Zeilen ausführen
08.04.2015 22:09:05
Rolf
Hi
Ja, wir.... Du als könner und ich als kopierer :-)
Super - auch das funktioniert. Ein kleiner Schönheitsfehler hat es noch. In der letzten Zeile, in der gar keine Angaben mehr stehen, steht nun in der Spalte B "neu" statt nichts...
Bekommen "wir" das noch weg? :)
grüsse
Rolf

AW: Makro nur bei eingeblendeten Zeilen ausführen
08.04.2015 22:11:00
Nepumuk
Hallo,
das schaffen wir auch noch:
For r = 6 To .Cells(.Rows.Count, 1).End(xlUp).Row - 1
Gruß
Nepumuk

AW: Makro nur bei eingeblendeten Zeilen ausführen
08.04.2015 22:54:33
Rolf
Duuuu, das funktioniert, wir haben's geschafft und damit meine ich natürlich dich :-)
Herzlichen dank....
Nun kämpfe ich noch damit, wie man per VBA den Filter auf "görsser als das zweitneuste Datum" setzt. Hatte hier im Forum zwar schon eine Lösung bekommen, die funktioniert aber irendwie nicht:

Dim Datum1 As Long
Dim Datum2 As Long
Datum1 = Application.WorksheetFunction.Large(Worksheets("Vergleich PPM-Liste").Columns("A"), _
1)
Datum2 = Application.WorksheetFunction.Large(Worksheets("Vergleich PPM-Liste").Columns("A"), _
2)
ActiveSheet.Range("$A$1:$A$10000").AutoFilter Field:=1, Criteria1:=">=" & Datum2

Zugegeben, das "Datum1" braucht es eigentlich nicht mehr.
Ach, wenn man nur VBA könnte .-)

Anzeige
AW: Makro nur bei eingeblendeten Zeilen ausführen
09.04.2015 08:31:46
Nepumuk
Hallo,
kann ich nicht nachvollziehen. Was heißt denn "funktioniert aber irendwie nicht" ?
Gruß
Nepumuk

319 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige