Cerca Riferimento



  • Cerca Riferimento
    di Riccardo (utente non iscritto) data: 31/07/2014 15:16:33

    Cerco una formuletta, la più semplice possibile da inserire in un foglio di excel per trovare il riferimento Riga/Colonna che contiene un certo valore.
    Ad esempio: se nelle celle B10:E32 ho una serie qualsiaso di valori, ad esempio numerici, ed il numero 6 si trova nella cella E15, vorrei applicare una formuletta che mi restituisse il valore "E15", per esempio:
    =CercaValore(B10:E32 ; 6) dovrebbe restituire: E15.
    Spero di essere stato chiaro.
    Grazie a chi risponderà.
    Riccardo



  • di Raffaele_53 (utente non iscritto) data: 31/07/2014 18:58:42

    >>>la più semplice possibile
    Ci sara anche di meglio, questa è facile da usarsi (3 diversi modi leggermente differenti)

    1)Dove desideri in una cella =INDIRIZZO(MIN(SE(B10:E32=6;RIF.RIGA(A10:A32)));MIN(SE(B10:E32=6;RIF.COLONNA(B1:E1)));4)

    2) Selezioni l'area ex B10:E32 e vai nello spazio sopra la cella A1 e scrivi ex ZONA e premi invio
    Dove desideri in una cella =INDIRIZZO(MIN(SE(ZONA=6;RIF.RIGA(ZONA)));MIN(SE(ZONA=6;RIF.COLONNA(ZONA)));4)

    3) Per migliorare la seconda possibilita, puoi anche scrivere 6 in una determinata cella ex A1
    Dove desideri in una cella =INDIRIZZO(MIN(SE(ZONA=A1;RIF.RIGA(ZONA)));MIN(SE(ZONA=A1;RIF.COLONNA(ZONA)));4)

    Tutte tre le formule sono da confermare, Ti posizioni alla fine della formula e premi CTRL+MAIUS+INVIO
    NB nel caso che nell'area ci siano più 6, l'indirizzo e relativo al primo trovato


  • Cerca Riferimento
    di Riccardo (utente non iscritto) data: 31/07/2014 19:13:35

    E' tutto molto bello e funzionante e ti ringrazio.
    A questo punto l'appetito vien mangiando, come recita un antico proverbio e mi viene in mente che si potrebbe risolvere con un programmino vba, che io però non sono capace di fare.
    La soluzione potrebbe essere molto più generale potendo passare come parametri sia la zona di ricerca, sia il valore da ricercare.
    Che cosa ne dici, sarebbe troppo complicato? Se mi metti sulla strada forse potrei tentare anche io.
    Si potrebbe usare qualche cosa come le seguenti righe?
    Function trova(Zona, item)
    For Each rng In Zona
    Set Cella = Cells(rng.Row, Zona.Column)
    If Trim(UCase(Cella)) = Trim(UCase(Item)) Then
    Exit For
    End If
    Next
    e poi???????????????
    End Func
    Ma poi non saprei come concludere per fare restituire i riferimenti in formato Riga/Colonna tipo A1.
    Che cosa ne dici tu?
    Una funzione del genere potrebbe anche trovare valori testuali oltre che numerici.
    Ti ringrazio molto
    Riccardo


  • Cerca Riferimento
    di Riccardo (utente non iscritto) data: 31/07/2014 19:14:42

    E' tutto molto bello e funzionante e ti ringrazio.
    A questo punto l'appetito vien mangiando, come recita un antico proverbio e mi viene in mente che si potrebbe risolvere con un programmino vba, che io però non sono capace di fare.
    La soluzione potrebbe essere molto più generale potendo passare come parametri sia la zona di ricerca, sia il valore da ricercare.
    Che cosa ne dici, sarebbe troppo complicato? Se mi metti sulla strada forse potrei tentare anche io.
    Si potrebbe usare qualche cosa come le seguenti righe?
    Function trova(Zona, item)
    For Each rng In Zona
    Set Cella = Cells(rng.Row, Zona.Column)
    If Trim(UCase(Cella)) = Trim(UCase(Item)) Then
    Exit For
    End If
    Next
    e poi???????????????
    End Func
    Ma poi non saprei come concludere per fare restituire i riferimenti in formato Riga/Colonna tipo A1.
    Che cosa ne dici tu?
    Una funzione del genere potrebbe anche trovare valori testuali oltre che numerici.
    Ti ringrazio molto
    Riccardo



  • di Textomb data: 31/07/2014 19:15:20

    Si potrebbe evitare la forma matriciale con la seguente:
    =INDIRIZZO(AGGREGA(14;6;RIF.RIGA(B10:E32)/(B10:E32=6);1);AGGREGA(14;6;RIF.COLONNA(B10:E32)/(B10:E32=6);1);4)



  • di gaetanopr data: 31/07/2014 19:19:19

    @Textomb
    bisognerebbe conoscere la versione di excel di Riccardo mi pare non l'abbia indicata


  • Cerca Riferimento
    di Riccardo (utente non iscritto) data: 31/07/2014 19:22:45

    Hai ragione ho dimenticato di dirfe che io ho una vecchissima versione: 2002 SP2
    Riccardo



  • di Textomb data: 31/07/2014 19:26:12

    Peccato. Allora mi sa che la mia formula non la puoi usare.



  • di gaetanopr data: 31/07/2014 19:28:31

    CIT:Textomb "Peccato. Allora mi sa che la mia formula non la puoi usare."
    mi riferivo proprio alla funzione AGGREGA




  • di ninai (utente non iscritto) data: 31/07/2014 19:31:36

    Ciao a tutti
    "piatto ricco", mi si ficco pure io

    altra soluzione senza invio matriciale
    in A1, il numero da cercare
    =INDIRIZZO(MATR.SOMMA.PRODOTTO((B10:E32=A1)*RIF.RIGA(B10:E32));MATR.SOMMA.PRODOTTO((B10:E32=A1)*RIF.COLONNA(B10:E32));4)



  • di Textomb data: 31/07/2014 19:50:52

    @ Riccardo
    Se vuoi utilizzare una Funzione Definita con il passaggio di parametri, nulla di più semplice.
    La Puoi arricchire come credi...
    Questa in teoria funziona. Ti restituisce l'indirizzo in termini assoluti.

    @ninai
    Una risorsa infinita...
     
    Public Function TrovaV(Zona As Range, Itm As Range) As String
    
        TrovaV = Zona.Find(Itm).Address
    
    End Function



  • di Raffaele_53 (utente non iscritto) data: 31/07/2014 22:04:15

    @ninai
    Ok, ma con due/tre valori uguali nella stessa area va in errore.

    @Riccardo
    Il codice come scritto da Textomb fà quello che desideri, in qualsiasi cella diversa dall'area B10:E32 sia per numeri/testo =trovaV(B10:E32;A1) oppure se hai dato il NOME =trovaV(Zona;"aaaa") oppure =trovaV(B10:E32;6)

    Invece per l'appetito....,passargli i parametri dell'area? Significa che non è sempre la stessa?
    L' esempio sarebbe di selezionare prima l'area di ricerca e tramite inputbox dargli il valore di ricerca

    NB. Le Formule fanno una ricerca orizzontale. Il codice una ricerca verticale.
     
    Option Explicit
    Sub Macro1()
    Dim Val As String, Risposta As Integer
    On Error Resume Next
    Val = InputBox("Digitare il testo da cercare", , "")
    If Val <> "" Then
        Selection.Find(What:=Val, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
            :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
            False, SearchFormat:=False).Activate 'al posto di Selection puoi usare Cells se lo vuoi in tutto il foglio
            MsgBox ActiveCell.Address
    End If
    End Sub



  • di ninai (utente non iscritto) data: 01/08/2014 07:40:07

    Ciao Raffaele
    Davo per scontato che il numero da trovare fosse univoco.
    con due/tre valori uguali nella stessa area, nessuna delle attuali soluzioni è adatta, perchè i riferimenti di cella da trovare sono più di uno.


  • Cerca Riferimento
    di Riccardo (utente non iscritto) data: 01/08/2014 09:45:12

    Grazie a tutti per i preziosi aiuti, suggerimenti, soluzioni: imparo sempre cose nuove e utilissime.
    Fatte alcune sempici variazioni ai suggerimenti precedenti, ho optato per la seguente soluzione che mi restituisce riferimenti NON assoluti in termini di formato (A1) e soprattutto non dà errore nel caso di valori molteplici; solo fornisce il primo dei riferimenti trovati. Nel caso il valore da cercare non esista restituisce l'utile informazione di errore "#VALORE!"
    Era proprio ciò che cercavo.
    Grazie infinite a tutti.
    Ciao
    Riccardo

    Public Function TrovaRiferimento(Zona As Range, Item As String)
    TrovaRiferimento = Zona.Find(Item).Address(RowAbsolute:=False, ColumnAbsolute:=False)
    End Function


  • Cerca Riferimento
    di Riccardo (utente non iscritto) data: 01/08/2014 12:00:53

    Chiedo scusa, ho dimenticato di spuntare "Risolto". Eccolo.
    Grazie ancora.
    Riccardo