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.xlsx e Leandro#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