2016-05-07 36 views
5

Ho bisogno di una macro che filtra le righe che i valori per le colonne A e B sono uguali, o che è lo stesso, che differenza è 0.Confronto 2 valori colonne (nella stessa riga)

Normalmente diffusa autofilter per un singolo intervallo, in questo modo:

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

In questo caso voglio abbinare o confrontare 2 colonne e applicare un filtro quando A-B=0

Naturalmente potrei aggiungere un'altra colonna di essere la differenza tra questi 2, ma se posso, preferisco evitarlo.

PS: In seguito, avrò bisogno di un altro filtro per A-B-C=0, nel caso in cui la soluzione si adatti anche a questo.

risposta

0

quanto ne so non è possibile filtrante con AutoFilter utilizzando un criterio, in cui un campo deve corrispondere un altro campo, senza l'utilizzo di un campo helper (colonna). Sicuramente è possibile utilizzare un filtro a più campi, ma per ogni campo deve essere impostato un criterio e un criterio non può essere una formula che si riferisce alla stessa riga nella tabella, ad esempio.

L'unica cosa che potrei pensare è usare i formati condizionali e quindi filtrare in base ai colori.

Esempio:

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 

Risultato:

enter image description here

2

Basta aggiungere una seconda riga specificando colonna e criteri per 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

codici Jeeped alla velocità della luce! –

+0

tbh, sono un po 'preoccupato per il fatto che il codice OP di hte avvia il filtro .AutoFilter nella riga 2. Mentre le etichette delle intestazioni delle colonne potrebbero essere nella riga 2, ho anche visto il codice delle persone. AutoFiltro in modo errato e include solo la parte dei dati quando. AutoFilter ** richiede ** una riga di etichette di intestazione di colonna. La proprietà [Range.CurrentRegion] (https://msdn.microsoft.com/en-us/library/office/ff196678.aspx) deve essere spostata su una riga per essere assolutamente corretta. – Jeeped

+0

l'importanza di includere uno snippet del layout del foglio di calcolo/data di esempio. –

Problemi correlati