Ricerca di una parola



  • Ricerca di una parola
    di Arianna (utente non iscritto) data: 26/07/2015 18:12:37

    Ciao,
    non sono un'esperta di questo programma quindi magari la mia domanda sembrerà banale.
    Io ho due colonne di testo con un elenco di 200 parole ciascuna. Quando devo derificare se ce ne è una è impensabile scorrerle tutte quindi.... c'è una funzione che mi permette, se io scrivo per esempio "fiume", di trovarmela portandomi alla cella in cui è presente la parola o dicendomi "sì"?.?
    Grazie



  • di Raffaele_53 data: 26/07/2015 18:34:54

    Quando hai aperto il file seleziona le due colonne con le frasi.
    In HOME, in alto a destra c'è trova e seleziona.



  • di Santuberto (utente non iscritto) data: 26/07/2015 18:46:14

    Buongiorno Arianna e buongiorno Raffaele_53.
    Immaginiamo che le colonne siano la D e la E. Prova la seguente funzione: =SE(CONTA.SE(D1:E200;"fiume")>0;"Si";"")



  • di alfrimpa data: 26/07/2015 18:56:36

    Ciao Arianna ed un saluto a Raffaele e a Santuberto.

    Ti ho allegato un file dove è inserita la sottostante funzione.

    Sul foglio di lavoro basta che scrivi = TrovaParola(tuointervallo; cella dove c'è la parola da cercare) e ti verrà restituito l'indirizzo di dove si trova la parola.

    Es. Se l'elenco è i d1:e200 e in f1 scrivi "fiume" dovrai scrivere

    =TrovaParola(d1:e200;f1) e ti verrà restituito l'indirizzo di cella dove si trova la parola fiume.

    Spero di essere stato d'aiuto e soprattutto chiaro.

    Alfredo 
     
    Function TrovaParola(Tabella_Dati As Range, Parola As Variant) As Variant
        If Parola = "" Then
            TrovaParola = ""
         Exit Function
        End If
        TrovaParola = Tabella_Dati.Find(Parola, LookAt:=xlWhole).Address(0, 0)
    End Function
    






  • di Vecchio Frac data: 26/07/2015 19:26:10

    Il codice che propone alfrimpa è interessante perchè adotta una tecnica tipica del mondo degli oggetti (il polimorfismo) anche se VBA non è orientato agli oggetti. Dichiarando il secondo parametro ("parola") as Variant, consente all'utilizzatore di passare sia una cella che una stringa ed entrambe vengono valutate nel modo corretto: se viene passato un range (una cella) ne viene ricavato il valore. Nella forma proposta quindi puoi scrivere anche =TrovaParola(d1:e200; "fiume") e il risultato sarà una stringa con l'indirizzo in forma relativa, quindi senza dollari (tale l'effetto di specificare .Address(0, 0) ), della cella che contiene il dato cercato.
    Tuttavia se il dato non viene trovato allora il risultato sarà il valore di errore #VALORE perchè questo caso non è gestito dalla procedura la quale non può valutare l'assegnazione a TrovaParola di un oggetto che non esiste (il metodo Find restituisce Nothing se non trova il dato cercato).
    Inoltre così com'è non trova, per esempio, valori corrispondenti a date.
    Eventuale correzione non è difficile e può essere un buon esercizio ;)





  • di Samuele (utente non iscritto) data: 26/07/2015 19:27:16

    Buonasera a tutti.

    Anche secondo me è (purtroppo) sufficiente un bel trova e seleziona. Oppure una semplice formattazione condizionale.

    Volendo però divertirsi un po' con le funzioni...

    ...mi associo alla soluzione di Santuberto, che chiaramente potrebbe mostrare anche il numero di volte in cui la parola compare (ipotizzando in F2 testo da trovare e D1:E2000 celle in cui cercare):
    =SE(CONTA.SE(D1:E200;F2)>0;"Parola presente "&CONTA.SE(D1:E200;F2)&" volte";"")

    Stesso risultato si potrebbe trovare con una forma matriciale:
    ={SOMMA(SE(D1:E200=$F$2;1;0))&" volte"}

    Volendo fornire anche la posizione della cella si potrebbe usare qualcosa tipo:
    =SE(NON(VAL.ERRORE(CONFRONTA(F2;D1:D200;0)));"la cella si trova nella prima colonna, riga "&CONFRONTA(F2;D1:D200;0);"la cella si trova nella seconda colonna, riga "&CONFRONTA(F2;E1:E200;0))

    E che palla... sì avete ragione, la sto complicando sempre più, mi fermo

    Ciao. Samuele




  • di Vecchio Frac data: 26/07/2015 20:05:02

    cit. "secondo me è (purtroppo) sufficiente un bel trova e seleziona"
    ---> Perchè "purtroppo" ?





  • di alfrimpa data: 26/07/2015 20:25:20

    @ Vecchio Frac

    Per onestà intellettuale devo premettere che la function sopra indicata non è un parto della mia "genialità" ma l'ho trovata in rete molto tempo fa e mi è venuta utile in tante occasioni.

    Non voglio dire la banalità che il problema #VALORE si può bypassare con un SE.ERRORE per cui ho provato a modificare il codice dichiarando una nuova variabile var cui ho associato il Find

    Poi ho scritto un If così:

    If var is Nothing Then
    TrovaParola = ""
    Else
    TrovaParola = var
    End If

    Ma non funziona.

    Cit. Vecchio Frac: "Eventuale correzione non è difficile....."

    Io dico sempre: "Non esistono cose facili o difficili; esistono cose che si sanno e cose che non si sanno"

    Puoi illuminarmi?

    Alfredo

    P.S. Per quanto riguarda le date non ci ho neanche provato.






  • di Arianna (utente non iscritto) data: 26/07/2015 20:56:17

    Grazie a tutti per le risposte.
    Tra tutte le formule ho scelto =SE(CONTA.SE(A1:B200;F2)>0;"FIUME "&CONTA.SE(A1:B200;F2)&" volte";"") che è quella che sono riuscita a capire più velocemente. Funziona e il "se" lo conosco e ci avevo provato.... mi mancava il "conta" lol

    Grazie a tutti comunque ^^



  • di Vecchio Frac data: 26/07/2015 21:37:08

    @alfrimpa
    La mia proposta.
     
    Option Explicit
    
    Function TrovaParola(Tabella_Dati As Range, Parola As String) As String
    Dim trovato As Range
    
        If Trim(Parola) = "" Then
            TrovaParola = ""
            Exit Function
        End If
        
        Set trovato = Tabella_Dati.Find(Parola, LookAt:=xlWhole)
        If Not (trovato Is Nothing) Then
            TrovaParola = trovato.Address(0, 0)
        Else
            TrovaParola = "Not found."
        End If
    End Function
    






  • di Vecchio Frac data: 26/07/2015 21:40:10

    cit. "If var is Nothing Then "
    ---> C'eri quasi... naturalmente per essere Nothing, var deve essere un oggetto... siccome Find restituisce un oggetto (di tipo range), attribuisci a var il risultato del metodo Find e lo testi: se è Nothing non è stato trovato il dato, altrimenti restituisci l'indirizzo non assoluto della cella in cui trovasi il testo trovato.
    Le date vengono trovate perchè viene cercata una corrispondenza stringa-stringa tra una data e la sua rappresentazione. Niente di magico :)





  • di totygno71 data: 26/07/2015 22:06:06

    @VF
    If Not (trovato Is Nothing) Then
    pekkè lo metti tra parenti???



  • di Vecchio Frac data: 26/07/2015 22:24:45

    Solo per non far casino linguisticamente e capire cosa ho scritto... due negazioni si annullano ^_^
    "SE NON (trovato E' NIENTE)" ---> "SE trovato E' QUALCOSA"