Il mio suggerimento e' che procedi in questo modo:
Metti il tuo elenco in un foglio a se' stante, es Foglio1, a cominciare da A2 verso il basso (nella riga 1 metti le intestzioni).
Vai sul foglio dove inserirai le convalide, es Foglio2
Fai tasto dx sul tab col nome del foglio, scegli Visualizza codice
Copia la seguente macro nel frame di dx
- Codice: Seleziona tutto
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
CheckArea = "M1:O1" '<<< Celle con Convalide
FoglioList = "Foglio1"
If Application.Intersect(Target, Range(CheckArea)) Is Nothing Then Exit Sub
CWS = ActiveSheet.Name
'Sheets(FoglioList).Select
Application.ScreenUpdating = False
Application.EnableEvents = False
CFcol = Target.Column - Range(CheckArea).Column + 1
Sheets(FoglioList).Cells(1, 7 + CFcol).Range("A1:C" & Rows.Count).Clear
aaa = Sheets(FoglioList).Range(Sheets(FoglioList).Cells(2, CFcol), Sheets(FoglioList).Cells(Rows.Count, CFcol).End(xlUp)).Address
For Each cella In Sheets(FoglioList).Range(Sheets(FoglioList).Cells(2, CFcol), Sheets(FoglioList).Cells(Rows.Count, CFcol).End(xlUp))
XstraCk = 1
If CFcol > 1 Then If Range(CheckArea).Range("A1").Value <> Sheets(FoglioList).Cells(cella.Row, 1).Value Then XstraCk = 0
If CFcol > 2 Then If Range(CheckArea).Range("B1").Value <> Sheets(FoglioList).Cells(cella.Row, 2).Value Then XstraCk = 0
If XstraCk = 1 And Application.WorksheetFunction.CountIf(Sheets(FoglioList).Range("H1:H10000").Offset(0, CFcol - 1), cella.Value) = 0 Then
Sheets(FoglioList).Cells(Rows.Count, 7 + CFcol).End(xlUp).Offset(1, 0).Value = cella.Value
End If
Next cella
Sheets(FoglioList).Range("H1", Sheets(FoglioList).Range("H" & Rows.Count).End(xlUp)).Name = "Conv1"
Sheets(FoglioList).Range("I1", Sheets(FoglioList).Range("I" & Rows.Count).End(xlUp)).Name = "Conv2"
Sheets(FoglioList).Range("J1", Sheets(FoglioList).Range("J" & Rows.Count).End(xlUp)).Name = "Conv3"
'Sheets(CWS).Select
Target.Select
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Torna sul foglio dove mettere le convalide; sulla prima cella, inserisci Consenti "Elenco" e come Origine "=Conv1" (senza apici); sulla seconda cella ancora Consenti "Elenco" e come Origine "=Conv2"; sulla terza sempre Consenti "Elenco" e come Origine "=Conv3". Come vincolo, le tre celle devono essere affiancate.
Torna sulla macro, e modifica l' istruzione CheckArea (quella marcata <<<) inserendo le vere celle in cui hai inserito le Convalide, rispettando la sintassi data.
A questo punto, se scegli in sequenza le celle da convalidare vedrai un elenco calcolato ad hoc.
Fai sapere, ciao.