Excel或VBA – 从另一个工作表中的dynamic列填充下拉列表,没有重复

我不知道这是否可能,但我正在尝试做一些事情,需要我填充下拉列表,以及一个正常的单元格列表,基于另一张表中的列中的项目。 我知道如何做一个常规列,但我想要使用的列更改长度,并有许多重复值,因为它是一个sorting清单。

所以在这张表上,在C5中,

在这里输入图像说明 该值应该能够基于第二张表格中列B的内容从下拉列表中select,而且不必滚动重复。 在这里输入图像说明

我很高兴使用VBA或一般的Excel公式来实现这一点。 我也知道,我不认为我已经解释得很好,所以请随时提供我所需的更多信息。

这是一个开始。 我假设项目列表在B1B1000之间的 Sheet2中 。 如果范围只是部分填满(可以调整1000以满足您的需要)

代码扫描该列表并生成一个DVstring。 数据validation然后应用于Sheet1单元格C5

Sub setupDV() Dim rSource As Range, rDV As Range, r As Range, csString As String Dim c As Collection Set rSource = Sheets("Sheet2").Range("B1:B1000") Set rDV = Sheets("Sheet1").Range("C5") Set c = New Collection csString = "" On Error Resume Next For Each r In rSource v = r.Value If v <> "" Then c.Add v, CStr(v) If Err.Number = 0 Then If csString = "" Then csString = v Else csString = csString & "," & v End If Else Err.Number = 0 End If End If Next r On Error GoTo 0 'MsgBox csString With rDV.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:=csString .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .ShowInput = True .ShowError = False End With End Sub