2016-05-07 13 views
5

muszę makro, które filtruje wiersze, których wartości dla kolumny A i B są równe, lub który jest tym samym, co różnica 0.Porównaj 2 kolumny wartości (w tym samym wierszu)

Zwykle stosuje Autofiltr dla Przedział pojedynczy, tak:

ActiveSheet.Range("A2:AX2").AutoFilter Field:=Range("X" & 1).Column, Criteria1:=">0"

W tym przypadku chcę, aby dopasować lub porównać 2 kolumny i zastosować filtr gdy A-B=0

oczywiście mogę dodać kolejną kolumnę jako różnica pomiędzy te 2, ale jeśli mogę, wolę tego unikać.

PS: Później będę potrzebował kolejnego filtra dla A-B-C=0, na wypadek gdyby twoje rozwiązanie również pasowało do tego.

Odpowiedz

0

O ile wiem, to nie jest możliwe filtrowanie z AutoFilter stosując kryteria, gdzie jedno pole musi pasować kolejne pole, bez korzystania z boiska pomocnika (kolumny). Z pewnością możliwe jest użycie filtru z wieloma polami, ale wtedy dla każdego pola muszą zostać określone kryteria, a kryterium nie może być formułą, która na przykład odnosi się do tego samego wiersza w tabeli.

Jedyne, co mogłem myśleć, to używanie formatów warunkowych, a następnie filtrowanie według kolorów.

przykład:

enter image description here

Sub Makro1() 

sConditionalFormula = "=AND($A1<>"""",$B1<>"""",$A1=$B1)" 
'FormatConditions needs localized formulas, so we create such: 
Cells(Rows.Count, Columns.Count).Formula = sConditionalFormula 
sConditionalFormulaLocal = Cells(Rows.Count, Columns.Count).FormulaLocal 
Cells(Rows.Count, Columns.Count).Clear 

With ActiveSheet 

    With .Range("A1").CurrentRegion 
    .FormatConditions.Delete 
    .FormatConditions.Add Type:=xlExpression, Formula1:=sConditionalFormulaLocal 
    With .FormatConditions(.FormatConditions.Count) 
    With .Interior 
    .Color = RGB(255, 255, 0) 
    End With 
    End With 

    .AutoFilter Field:=1, Criteria1:=RGB(255, 255, 0), Operator:=xlFilterCellColor 

    End With 

End With 

End Sub 

Wynik:

enter image description here

2

Wystarczy dodać drugi wiersz określający kolumnę i kryteria do Range.AutoFilter Method.

With Worksheets("Sheet1") 
    'if there is an active AutoFilter, turn it off 
    If .AutoFilterMode Then .AutoFilterMode = False 

    With .Cells(1, 1).CurrentRegion 
     .AutoFilter field:=1, Criteria1:=0 
     .AutoFilter field:=2, Criteria1:=0 

     'filtered on rows that have zero in column A and column B 

     .AutoFilter field:=1 
     .AutoFilter field:=2 

     'filter is active but no criteria has been applied 

     .AutoFilter field:=1, Criteria1:=0 
     .AutoFilter field:=2, Criteria1:=0 
     .AutoFilter field:=3, Criteria1:=0 

     'filtered on rows that have zero in column A, column B and column C 

    End With 
    'turn off AutoFilter completely 
    If .AutoFilterMode Then .AutoFilterMode = False 
End With 
+0

kody Jeeped z prędkością światła! –

+0

tbh, jestem trochę zaniepokojony tym, że kod OP uruchamia format .AutoFilter w wierszu 2. Podczas gdy etykiety nagłówków kolumn mogą znajdować się w wierszu 2, widziałem również kod osoby .AutoFilter niepoprawnie i uwzględnia tylko część danych gdy .AutoFilter ** wymaga ** wiersza etykiet nagłówków kolumn. Właściwość [Range.CurrentRegion] (https://msdn.microsoft.com/en-us/library/office/ff196678.aspx) musi być przesunięta w dół, aby była absolutnie poprawna. – Jeeped

+0

znaczenie włączenia fragmentu arkusza kalkulacyjnego/przykładowej daty. –

Powiązane problemy