Come posso filtrare i dati in base agli elementi in un elenco?


0

Come posso filtrare le voci che contengono una parola specifica in un elenco di parole? Ad esempio, ho un elenco di nomi di strade a Singapore.

Amoy Street, Singapore
Ann Siang Hill
Anson Road
Arab Street
Armenian Street, Singapore
BBaghdad Street (Singapore)
Balestier Road
Banda Street
Bartley Road
Beach Road, Singapore
Bencoolen Street
Bernam Street
Boat Quay
Boon Tat Street
Boundary Road, Singapore
Bras Basah Road
Bugis Street
Bukit Batok Road
Bukit Pasoh Road
Bukit Timah Road
CCantonment Road, Singapore
Choa Chu Kang Road
Clarke Quay
Clementi Road
Club Street
Collyer Quay
Connaught Drive
Craig Road (Singapore)
Cross Street
e molti altri

Il mio foglio di calcolo ha un gran numero di voci come le seguenti, che possono contenere o meno i nomi delle strade menzionati nel mio elenco:

  1. Ho visto un incidente a Thomson Road
  2. L'ho trovato per caso
  3. 6 veicoli si sono schiantati su Balestier Road
  4. Voglio schiantarmi adesso. Così stanco.
  5. L'autobus si scontra con la bicicletta ad Arab Street.
  6. Incidente alla City Road.
  7. Puoi mandare in crash la mia casa più tardi.

Come faccio a filtrare per restituire voci che contengono qualsiasi nome di strada identificato nell'elenco di nomi? Come posso introdurre un array / elenco di nomi di strade in Microsoft Excel e quindi collegarlo a una funzione di filtro?


Possibile duplicato di superuser.com/questions/670827/microsoft-excel-filter-function (creato dallo stesso utente)
douglaslps

@douglaslps Hai ragione. Ho votato per chiudere l'altra domanda perché questa ha molti più dettagli.
Charlie,

Puoi definire quanti valori stai verificando. Sembra possibile che ce ne siano migliaia e che il volume possa escludere alcune possibili risposte.
James Jenkins,

Risposte:


2

Prima di tutto, se si desidera abbinare frasi che contengono "Amoy Street", è necessario rimuovere ", Singapore" da quella prima voce (e le altre che lo contengono, e allo stesso modo con "(Singapore)"). Si consiglia di fare questo con una formula in una colonna di supporto, così supponiamo che l'elenco dei nomi minimizzato stradali è nelle cellule B1attraverso B42. E supponi che le tue sette frasi di esempio (o diciassette mila, o quante ne hai molte) siano nella colonna  C. genere

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

nella cella D1e digitare Ctrl+ Shift+ Enter. Questa operazione fa entrare la formula come formula di matrice , facendolo apparire tra parentesi graffe: {=AND(ISERROR(SEARCH(A$1:A$3, B1)))}. Trascina / riempi verso il basso per coprire la colonna  C. Questo valuterà FALSO per ogni frase ( C valore) che contiene una stringa da B1:B42e VERO per ognuno che non lo fa. Puoi filtrare su quello. Se non ti piace il fatto che questi valori siano "indietro", basta racchiudere l'espressione in un NOT( ):

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

Questo non distingue tra maiuscole e minuscole. Se si desidera che sia sensibile al maiuscolo / minuscolo, sostituire SEARCHcon FIND.

Questa soluzione trova sottostringhe. Renderlo maiuscole e minuscole riduce la probabilità di falsi positivi come "Banson Road" e "Uboat Quay". Se il nome della strada non verrà mai visualizzato all'inizio di una frase, puoi eliminare questi sottofondi che corrispondono a falsi positivi anteponendo uno spazio a ogni nome di strada nella colonna  B. Se il nome di una strada può apparire all'inizio di una frase, allora fallo e cambia la formula in

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

Per gestire "Mr. Connaught guida una Mercedes ”, fai la stessa cosa ma aggiungi gli spazi. Questo non gestirà ancora "Il signor Connaught guida una Mercedes?", Quindi potresti voler seguire il percorso case sensitive.

Ho testato questa soluzione per un numero limitato di stringhe. È possibile che fallisca se l'elenco delle strade è molto lungo.


0

Utilizzare il filtro automatico con l' opzione Contiene ... Ciò ti consentirà di visualizzare elementi che contengono una determinata stringa di testo al loro interno. Le righe che non contengono la stringa verranno nascoste.

Riferimento

EDIT # 1 :

Come ha sottolineato James Jenkins, l'uso del filtro automatico con Contiene ... non consentirà di applicare simultaneamente un lungo elenco di sottostringhe incluse ........... ecco un approccio alternativo basato su VBA.

Supponiamo di avere una cartella di lavoro con due schede "strade" e "elementi". L'elenco delle strade si trova nella scheda "strade" a partire da A2 . L'elenco degli elementi da filtrare si trova nella scheda "elementi" a partire da A2 .

Questa macro legge prima l'elenco delle strade in un array. L'array viene applicato a ciascun elemento nell'elenco degli elementi. Ogni riga dell'elemento è nascosta o visualizzata.

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

Non credo che ciò soddisferà le esigenze del PO
James Jenkins, l'

Ciao James: potresti avere ragione! ............... Porrò alcuni VBA in alternativa!
Gary's Student,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.