Condividi tramite

Come impostare la scelta tra diversi valori se un elenco contiene più volte lo stesso testo?

Anonimo
2015-08-18T17:58:06+00:00

Salve,

la funzione CERCA.VERT mi trova solo il primo valore di un elenco che contiene più volte lo stesso valore. A me servirebbe poter scegliere quale tra queste righe poter restituire nella cella della formula. Come faccio?

A titolo di esempio riporto una simulazione di quello che vi chiedo:

Nel file "File esempio" e nel foglio "Foglio 1" ho questo elenco:

A B C D

Marchese Pippo Padre (vuoto)

Marchese Pippo Nipote (vuoto)

Marchese Giuseppe Figlio (vuoto)

Marchese Giuseppe Cugino grande

Marchese Giuseppe Cugino piccolo

In un altro file ho impostato la formula CERCA.VERT nella cella C2 in questo modo: CERCA.VERT(D2;'[File esempio.xlsx]Foglio 1'!$1:$1048576;4;FALSO) e nella cella D2 scrivo manualmente la parola "cugino".

Adesso nella cella C2 mi compare sempre la parola "grande" quando avrei necessità di poter scegliere tra "grande" e "piccolo".

Grazie a chiunque riesce ad aiutarmi.

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

12 risposte

Ordina per: Più utili
  1. Anonimo
    2015-08-19T12:45:42+00:00

    Buongiorno Norman David,

    la ringrazio per la preziosa collaborazione ma non sono riuscito a risolvere il problema. 

    E' molto più semplice se le condivido i file in questione con i passaggi svolti e di conseguenza capire in che modo risolvere il mio inghippo.

    Al link http://1drv.ms/1Nkos9o trova i due file chiamati "file esempio" e "banca dati".

    Nel primo file è dove ho necessità di risolvere il problema, mentre il secondo file serve per prelevare i dati richiesti.

    Nel file esempio, la colonna "prodotto utilizzato" mi serve per digitare il nome del prodotto che mi serve e di conseguenza si porta con se tutte le informazioni relative che servono a compilare le altre colonne.

    Il problema sta, per esempio, se digito il nome "plenum 50 WG" mi riestituisce nelle colonne della stessa riga solo il primo risultato trovato, mentre per la stessa voce vi sono diverse righe nel file "banca dati" con valori differenti.

    Ecco, detto questo, in maniera sintetica ho esposto il quesito, stavolta in maniera chiara. :) 

    Comunque mi preme ancora ringraziarla per l'interesse nei miei confronti.

    With regards,

    Leandro

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2015-08-19T01:37:52+00:00

    Ciao Leandro,

    Per facilità di implementazione e utilizzo, nel mio file Leandro # B_20150818.xlsm, su Foglio1, ho inserito un pulsante entitolato Cerca Valore. Questo pulsante è allegato alla macro CercaValore e controlla il secondo approccio suggerito da me.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2015-08-19T00:46:46+00:00

    Ciao Leandro,

    Per restituire tutti i valori disponibile,  nella cella (diciamo) G3 del foglio di interesse dell'altro file**'**, immetti la seguente formula:

    =SE.ERRORE(INDICE('[Leandro#A20150818.xlsx]Foglio1'!$B$1:$B$100;GRANDE(('[Leandro#A20150818.xlsx]Foglio1'!$A$1:$A$100=$D$2)*RIF.RIGA('[Leandro#A20150818.xlsx]Foglio1'!$A$1:$A$100);CONTA.SE('[Leandro#A20150818.xlsx]Foglio1'!$A$1:$A$100;$D$2)+1-RIF.RIGA(A1)));"")

    doveLeandro#A20150818.xlsx  è il tuo file "File esempio" e Foglio1 è il foglio di interesse in quel file. Questa è una formula matriciale che dovrebbe essere confermata con Ctrl+Shift+Invio. Trascina la formula in basso fino a quando i valori restituiti diventano vuoti.

    Per rendere possibile la scelta di uno dei valori eventualmente disponibili, ti offro due strade:

    Primo modo:

    Avendo trascinato la formula in basso

    • Scegli le formule e crea una tabella di una colonna, premendo Ctrl+T
    • Scegli queste celle, senza l'eventuale intestazione
    • Nella barra delle formule, immetti il nome MieiValori e premi Invio
    • Seleziona le celle che dovrebbero restituire un valore selezionato
    • Scheda Home | Dati | Convalida dati
    • Seleziona l'opzione Elenco
    • Come O rigine, immetti = MieiValori
    • OK

    Secondo modo: 

    • Alt-F11 per aprire l'editor di VBA
    • Alt-IM per inserire un nuovo modulo di codice
    • Nel nuovo modulo vuoto, incolla il seguente codice:

    '=========>>

    Option Explicit

    Public arrIn As Variant

    Public arrOut() As Variant

    Public destRng As Range

    Public critRng As Range

    '--------->>

    Public Sub CercaValore()

        On Error Resume Next

        Set destRng = Application.InputBox( _

                      Prompt:="Seleziona la cella di input", _

                      Title:="SELEZIONA CELLA", _

                      Default:=ActiveCell.Address, Type:=8)

        On Error GoTo 0

        If Not destRng Is Nothing Then

            UserForm1.Show vbModeless

        Else

            Call MsgBox("Non hai selezionato la cella di input!", _

                        Buttons:=vbCritical, _

                        Title:="RIPROVA!")

            Exit Sub

        End If

    End Sub

    '--------->>

    Public Sub FindMultipleLookups()

        Dim srcWB As Workbook, destWB As Workbook

        Dim srcSH As Worksheet, destSH As Worksheet

        Dim srcRng As Range, destRng As Range, critRng As Range

        Dim i As Long, j As Long, k As Long, iCols As Long

        Dim LRow As Long

        Dim sStr As String

        Const sWbName As String = _

                        "Leandro#A20150818.xlsx"             '<<===== Modifica

        Set destWB = ThisWorkbook

        Set srcWB = Workbooks(sWbName)

        Set srcSH = srcWB.Sheets("Foglio1")                 '<<===== Modifica

        Set destSH = ActiveSheet 

        With srcSH

            LRow = LastRow(srcSH, .Columns("A:A"))

            Set srcRng = .Range("A1:C" & LRow)

        End With

        arrIn = srcRng.Value

        iCols = UBound(arrIn, 2)

        With destSH

            Set critRng = .Range("D2")

            Set destRng = ActiveCell

        End With

        sStr = UCase(critRng.Value)

        For i = 1 To UBound(arrIn, 1)

            If UCase(arrIn(i, 1)) = sStr Then

                j = j + 1

                ReDim Preserve arrOut(1 To iCols, 1 To j)

                For k = 1 To iCols

                    arrOut(k, j) = arrIn(i, k)

                Next k

            End If

        Next i

    End Sub

    '--------->>

    Public Function LastRow(SH As Worksheet, _

                            Optional Rng As Range)

        If Rng Is Nothing Then

            Set Rng = SH.Cells

        End If

        On Error Resume Next

        LastRow = Rng.Find(What:="*", _

                           after:=Rng.Cells(1), _

                           Lookat:=xlPart, _

                           LookIn:=xlFormulas, _

                           SearchOrder:=xlByRows, _

                           SearchDirection:=xlPrevious, _

                           MatchCase:=False).Row

        On Error GoTo 0

    End Function

    '<<=========

    • Alt-IUper creare una Userform
    • Sulla Userform, inserisci un controllo ListBox e due controlli CommandButton
    • Premi F7 per accedere il modulo di codice della Userform
    • Incolla il seguente codice:

    '=========>>

    Option Explicit

    '--------->>

    Private Sub UserForm_Initialize()

        Call FindMultipleLookups

        With Me

            With .ListBox1

                .ColumnCount = UBound(arrOut, 2)

                .ColumnWidths = "50;50;50;50;50;50"

                .Column = arrOut

            End With

            .CommandButton1.Caption = "Immetti valore"

            .CommandButton2.Caption = "Esci"

        End With

    End Sub

    '--------->>

    Private Sub CommandButton1_Click()

        Dim i As Long

        With Me.ListBox1

            i = .ListIndex

            If i = -1 Then

                Call MsgBox(Prompt:="Non hai scelto un valore!", _

                            Buttons:=vbCritical, _

                            Title:="ERRORE")

            Else

                ActiveCell.Value = .List(i, 2)

            End If

        End With

    End Sub

    '--------->>

    Private Sub CommandButton2_Click()

        Unload Me

    End Sub

    '<<=========

    • Alt-Q per chiudere l'editor di VBA e tornare a Excel.
    • Alt-F8 per aprire  la finestra di gestione delle macro
    • Seleziona CercaValore | Esegui

    Potresti scaricare i miei file di esempio:

    Leandro#A_20150818.xlsxLeandro#B_20150818.xlsm a:

                                 **http://1drv.ms/1Lil3Vu**

    Nota che il primo di questi due file contieni la tua tabella di dati (estesa da me) e la seconda dimostra i due modi indicati qui sopra.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2015-08-18T21:02:51+00:00

    Per scegliere intendo se è possibile poter aprire un menu a tendina o una finestra popup o qualunque cosa che permetta, visto i valori molteplici, di indicare quale riportare.

    Colgo l'occasione per ringraziare per l'interesse nei confronti della mia richiesta.

    Buonasera

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2015-08-18T20:15:49+00:00

    Definisci *scegliere*?

    La risposta è stata utile?

    0 commenti Nessun commento