2016-05-07 4 views
5

мне нужен макрос, который фильтрует строки, которые значения для столбцов А и В равны, или, что то же самое, что разность равна 0.Сравнить 2 колонки значения (в той же строке)

Обычно я применять для автофильтра один диапазон, например:

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

в этом случае я хочу, чтобы соответствовать или сравнить 2 колонки и применить фильтр, когда A-B=0

конечно, я мог бы добавить еще один столбец, разница между эти 2, но если я могу предпочесть избегать этого.

PS: Позже мне понадобится еще один фильтр для A-B-C=0, если ваше решение подходит и для этого.

ответ

0

Насколько я знаю, что это не возможно, фильтрация с AutoFilter с использованием критериев, где одно поле должно соответствовать еще одно поле, не используя помощника поле (столбец). Конечно, это возможно, используя фильтр нескольких полей, но затем для каждого поля должен быть задан критерий, а критерии не могут быть формулой, которая относится к той же строке в таблице, например.

Единственное, что я мог подумать - использовать условные форматы и затем фильтровать по цветам.

Пример:

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 

Результат:

enter image description here

2

Просто добавьте второй столбец с указанием строки и критериев для 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

Jeeped коды со скоростью света! –

+0

tbh, я немного обеспокоен тем, что код hte OP запускает .AutoFilter в строке 2. Хотя метки заголовков столбцов могут быть очень хорошими в строке 2, я также видел, что люди кодируют .AutoFilter неправильно и включают только часть данных когда .AutoFilter ** требует ** строки заголовков заголовков столбцов. Свойство [Range.CurrentRegion] (https://msdn.microsoft.com/en-us/library/office/ff196678.aspx) необходимо сместить в ряд, чтобы быть абсолютно правильным. – Jeeped

+0

важность включения фрагмента таблицы в таблицу или пример даты. –

Смежные вопросы