Filtrar una tabla por input de String de 2 columnas
Publicado por Agustin (1 intervención) el 20/12/2017 16:17:07
Buenas
Tengo una tabla y al lado de la misma implementé un search box en donde se ingresa un String y filtra por ese input en una columna determinada. El problema surge cuando uso otro search box pero que tiene que buscar en 2 columnas, si no lo encuentra en una, debe buscar en la otra, y si aparece en ambas, debe mostrar todas las filas que cumplan con la condicion. Al lado del search box uso un botón que tiene asociada la funcionalidad de recuperar la tabla.
Probé de todo, incluso hice un método para que oculte las filas que no cumplen con la condición.
Para resumir, el problema radica cuando se repite el contenido en ambas columnas, debido a que el método AutoFilter se asigna a una columna por vez.
Les adjunto el código que implementé a ver qué se les ocurre que puedo hacer.
*Este es el del search box.*
*Este es el del botón*
De antemano les agradezco.
Tengo una tabla y al lado de la misma implementé un search box en donde se ingresa un String y filtra por ese input en una columna determinada. El problema surge cuando uso otro search box pero que tiene que buscar en 2 columnas, si no lo encuentra en una, debe buscar en la otra, y si aparece en ambas, debe mostrar todas las filas que cumplan con la condicion. Al lado del search box uso un botón que tiene asociada la funcionalidad de recuperar la tabla.
Probé de todo, incluso hice un método para que oculte las filas que no cumplen con la condición.
Para resumir, el problema radica cuando se repite el contenido en ambas columnas, debido a que el método AutoFilter se asigna a una columna por vez.
Les adjunto el código que implementé a ver qué se les ocurre que puedo hacer.
*Este es el del search box.*
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Private Sub Search_Certificate_Change()
Dim strFilter As String
strFilter = "*" & [E3] & "*"
Debug.Print strFilter
Dim ws As Worksheet
Set ws = Sheets("Matrix")
Set rng = ActiveSheet.ListObjects("ManagersTable").Range
ws.AutoFilterMode = False
'Si está en B
If Application.WorksheetFunction.CountIf(Sheets("Matrix").Range("B:B"), strFilter) <> 0 Then
'Si está en C, tengo que ocultar todas las filas que no contengan el String
If Application.WorksheetFunction.CountIf(Sheets("Matrix").Range("C:C"), strFilter) <> 0 Then
BeginRow = 10
EndRow = 63
ChkCol = 3
For RowCnt = BeginRow To EndRow
If Cells(RowCnt, ChkCol).Value <> strFilter Then
Cells(RowCnt, ChkCol).EntireRow.Hidden = True
Else
Cells(RowCnt, ChkCol).EntireRow.Hidden = False
End If
Next RowCnt
' Este es un hardcode de que siempre filtre por la columna B rng.AutoFilter Field:=2, Criteria1:=strFilter
Else:
rng.AutoFilter Field:=2, Criteria1:=strFilter, Operator:=xlFilterValues
End If
Else:
rng.AutoFilter Field:=3, Criteria1:=strFilter, Operator:=xlFilterValues
End If
End Sub
*Este es el del botón*
1
2
3
4
5
6
7
8
9
Private Sub Clear_Certificate_Click()
On Error Resume Next
[E3] = ""
ActiveSheet.ListObjects("ManagersTable").AutoFilter.ShowAllData
On Error GoTo 0
'ActiveSheet.ListObjects("ManagersTable").Range("B10:B100").EntireRowHidden = False
End Sub
De antemano les agradezco.
Valora esta pregunta


0