es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El filtrado de matrices de filtro automático solo funciona filtrando por el último criterio en la matriz.

Estoy intentando ordenar una tabla eliminando las filas que tienen su celda en la columna 9 y NO comienzan con S, X o P. A continuación se muestra el código que tengo para filtrar las filas que no cumplen con mis criterios, y luego eliminarlas, y finalmente mostrar los valores restantes.

Range("I:I").NumberFormat = "@"

lo.Range.AutoFilter Field:=9, Criteria1:=Array("<>S*", "<>X*", "<>P*"), Operator:=xlOr

Application.DisplayAlerts = False
lo.DataBodyRange.SpecialCells(xlCellTypeVisible).Delete
Application.DisplayAlerts = True

lo.AutoFilter.ShowAllData

Actualmente, sin importar el orden, solamente se mantienen las filas que contienen el último criterio en el array.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El código proporcionado filtra las filas que no cumplen con el criterio de tener su celda en la columna 9 que comienza con S, X o P. Sin embargo, el problema es que, independientemente del orden en que se incluyan los criterios en el array, solo se mantienen las filas que cumplen con el último criterio del array. Esto probablemente se deba al uso del operador xlOr en los criterios de filtrado.

    Para solucionar este problema, podemos modificar los criterios de filtrado para usar el operador xlAnd en lugar de xlOr. Esto asegurará que solo se mantengan las filas que cumplen con los tres criterios. El código modificado se vería así:

    Range("I:I").NumberFormat = "@"
    
    lo.Range.AutoFilter Field:=9, Criteria1:="<>S*", Operator:=xlAnd, Criteria2:="<>X*", Operator:=xlAnd, Criteria3:="<>P*"
    
    Application.DisplayAlerts = False
    lo.DataBodyRange.SpecialCells(xlCellTypeVisible).Delete
    Application.DisplayAlerts = True
    
    lo.AutoFilter.ShowAllData
    

    Este código debería filtrar la tabla correctamente, manteniendo solo las filas donde la celda en la columna 9 comienza con S, X o P.

Comments are closed.