Ya no busques más por todo internet porque estás al espacio indicado, contamos con la respuesta que necesitas pero sin problema.
Solución:
Creo (a partir de la experimentación, MSDN no es útil aquí) que no hay una forma directa de hacer esto. Ajuste Criteria1
a una Array
es equivalente a usar las casillas de verificación en el menú desplegable; como usted dice, solo filtrará una lista basada en elementos que coincidan con uno de los que están en el array.
Curiosamente, si tienes los valores literales "<>A"
y "<>B"
en la lista y filtrar en estos el macro la grabadora viene con
Range.AutoFilter Field:=1, Criteria1:="=<>A", Operator:=xlOr, Criteria2:="=<>B"
que funciona Pero si luego tienes el valor literal "<>C"
también y filtra por los tres (usando casillas de verificación) mientras graba un macroel macro grabadora replica con precisión su código que luego falla con un error. Supongo que lo llamaría un error: hay filtros que puede hacer usando la interfaz de usuario que no puede hacer con VBA.
De todos modos, volviendo a tu problema. Es posible filtrar valores que no son iguales a algunos criterios, pero solo hasta dos valores, lo que no funciona para usted:
Range("$A$1:$A$9").AutoFilter Field:=1, Criteria1:="<>A", Criteria2:="<>B", Operator:=xlAnd
Hay un par de soluciones posibles dependiendo del problema exacto:
- Use una “columna auxiliar” con una fórmula en la columna B y luego filtre eso, por ejemplo
=ISNUMBER(A2)
o=NOT(A2="A", A2="B", A2="C")
luego filtrarTRUE
- Si no puede agregar una columna, use el autofiltro con
Criteria1:=">-65535"
(o un número adecuado inferior al que espera) que filtrará los valores no numéricos, suponiendo que esto es lo que desea - Escriba un sub VBA para ocultar filas (no es exactamente lo mismo que un autofiltro, pero puede ser suficiente según sus necesidades).
Por ejemplo:
Public Sub hideABCRows(rangeToFilter As Range)
Dim oCurrentCell As Range
On Error GoTo errHandler
Application.ScreenUpdating = False
For Each oCurrentCell In rangeToFilter.Cells
If oCurrentCell.Value = "A" Or oCurrentCell.Value = "B" Or oCurrentCell.Value = "C" Then
oCurrentCell.EntireRow.Hidden = True
End If
Next oCurrentCell
Application.ScreenUpdating = True
Exit Sub
errHandler:
Application.ScreenUpdating = True
End Sub
Tienes la posibilidad compartir este enunciado si te valió la pena.