¿Cómo puedo filtrar datos basados ​​en elementos en una lista?

0

¿Cómo puedo filtrar las entradas que contienen una palabra específica en una lista de palabras? Por ejemplo, tengo una lista de nombres de carreteras en Singapur.

Amoy Street, Singapur
Ann Siang Hill
Camino de anson
Calle arabe
Calle armenia, singapur
Calle Bagdad (Singapur)
Camino balestier
Calle banda
Bartley Road
Playa Road, Singapur
Calle bencoolen
Calle bamam
Muelle de barco
Boon Tat Street
Boundary Road, Singapur
Bras Basah Road
Calle bugis
Bukit Batok Road
Bukit Pasoh Road
Bukit Timah Road
Cantonment Road, Singapur
Choa Chu Kang Road
Clarke Quay
Clementi Road
Club Street
Collyer Quay
Connaught Drive
Craig Road (Singapur)
Cruzar la calle
y muchos más

Mi hoja de cálculo tiene una gran cantidad de entradas como la siguiente, que pueden contener o no nombres de carreteras mencionados en mi lista:

  1. Vio un accidente en Thomson Road
  2. Encontré esto por accidente
  3. 6 vehículos se estrellaron en la calle Balestier
  4. Quiero chocar ahora. Tan cansado.
  5. El autobús choca con la bicicleta en la calle árabe.
  6. Accidente en City Road.
  7. Puedes chocar mi casa más tarde.

¿Cómo puedo filtrar para devolver las entradas que contienen cualquier nombre de vía identificado en la lista de nombres? ¿Cómo introduzco una matriz / lista de nombres de carreteras en Microsoft Excel y luego las relaciono con una función de filtro?

user2964366
fuente
Posible duplicado de superuser.com/questions/670827/microsoft-excel-filter-function (creado por el mismo usuario)
douglaslps
@douglaslps Tienes razón. He votado para cerrar la otra pregunta porque esta tiene muchos más detalles.
CharlieRB
¿Puedes definir cuántos valores estás verificando? Parece posible que hay miles, y el volumen puede excluir algunos posibles contestadores.
James Jenkins

Respuestas:

2

En primer lugar, si desea hacer coincidir oraciones que contengan "Amoy Street", deberá eliminar "Singapur" de esa primera entrada (y las demás que lo contienen, y también con "(Singapur)"). Si lo desea, puede hacer esto con una fórmula en una columna auxiliar, así que supongamos que su lista minimizada de nombres de carreteras está en las celdas B1 mediante B42. Y suponga que sus siete oraciones de ejemplo (o diecisiete mil, o las que tenga) están en la columna C. Tipo

=AND(ISERROR(SEARCH(B$1:B$42, C1)))

en la celda D1 y escriba Ctrl + Cambio + Entrar . Esto entra en la fórmula como fórmula matricial , haciendo que aparezca entre llaves: {=AND(ISERROR(SEARCH(A$1:A$3, B1)))}. Arrastre / rellene hacia abajo para cubrir la columna C. Esto evaluará a FALSO para cada oración ( C valor) que contiene una cadena de B1:B42 y VERDADERO para cada uno que no lo hace. Puedes filtrar en eso. Si no te gusta el hecho de que estos valores son "hacia atrás", simplemente envuelve la expresión en un NOT( ):

=NOT(AND(ISERROR(SEARCH(B$1:B$42, C1))))

Este es un caso insensible. Si desea que sea sensible a mayúsculas y minúsculas, reemplace SEARCH con FIND.

Esta solución encuentra subcadenas. Hacerlo sensible a las mayúsculas reduce la probabilidad de falsos positivos como "Banson Road" y "Uboat Quay". Si el nombre de la carretera nunca aparecerá al principio de una oración, puede eliminar estas subcadenas que coincidan con falsos positivos al añadir un espacio a cada nombre de la carretera en la Columna B. Si un nombre de carretera puede aparece al principio de una oración, entonces haz eso y cambia la fórmula a

=AND(ISERROR(SEARCH(B$1:B$42," " & C1)))

Para manejar "Sr. Connaught conduce un Mercedes ", haz lo mismo pero adjuntar los espacios. Esto todavía no puede manejar "¿Connaught conduce un Mercedes?", por lo que es posible que desee ir la ruta sensible al caso.

He probado esta solución para un pequeño número de cadenas. Es posible que falle si la lista de carreteras es muy larga.

Scott
fuente
0

Utilice Autofiltro con el Contiene ... opción. Esto le permitirá ver los elementos que contienen una cadena de texto dada dentro de ellos. Las filas que no contengan la cadena quedarán ocultas.

Referencia

EDITAR # 1 :

Como señaló James Jenkins, usar AutoFilter con Contiene ... no permitirá que una larga lista de subcadenas incluidas se aplique simultáneamente ........... aquí hay un enfoque alternativo basado en VBA.

Digamos que tenemos un libro de trabajo con dos pestañas "caminos" y "elementos". La lista de caminos está en la pestaña "caminos" que comienza en A2 . La lista de elementos a filtrar se encuentra en la pestaña "elementos" que comienza en A2 .

Esta macro primero lee la lista de caminos en una matriz. La matriz se aplica a cada elemento de la lista de elementos. Cada fila de elemento se oculta o se muestra.

Sub FilterByList()
    Dim s1 As Worksheet, s2 As Worksheet
    Set s1 = Sheets("roads")
    Set s2 = Sheets("items")
    Dim N1 As Long, N2 As Long, L1 As Long, L2 As Long
    Dim r1 As Range, r2 As Range

    N1 = s1.Cells(Rows.Count, "A").End(xlUp).Row
    N2 = s2.Cells(Rows.Count, "A").End(xlUp).Row
    ReDim rds(1 To N1 - 1) As String
    For L = 2 To N1
        rds(L - 1) = s1.Cells(L, 1)
    Next L

    s2.Cells.EntireRow.Hidden = False
    For L2 = 2 To N2
        Set r2 = s2.Cells(L2, "A")
        v2 = r2.Value
        r2.EntireRow.Hidden = True
        For L1 = 2 To N1
            If InStr(1, v2, rds(L1 - 1)) > 0 Then
                r2.EntireRow.Hidden = False
            End If
        Next L1
    Next L2
End Sub
Gary's Student
fuente
No creo que esto satisfaga las necesidades del OP.
James Jenkins
Hola James: ¡Puede que tengas razón! ............... ¡Publicaré algunos VBA como alternativa!
Gary's Student