Answers:
如果要使用验证数据创建列表,则不可能,您将收到错误消息: 您不能将参考运算符(例如联合,交集和范围)或数组常量用于条件格式标准。
因此,我建议您尝试使用代码作为解决方法来帮助您解决此问题。
Sub SetDataValidation() '
Dim WS As Worksheet
Set WS = Worksheets("Sheet1")
Dim rng As Range
'get range of named range
Set rng = WS.Range("NUMBER")
Dim ARR As Variant
ReDim ARR(1 To 1) As Variant
'add cell value from named range to an array
For i = 1 To rng.Cells.Count
ARR(UBound(ARR)) = rng.Cells(i).Value
ReDim Preserve ARR(1 To UBound(ARR) + 1) As Variant
Next i
'add your predefined value to the array
ARR(UBound(ARR)) = 17
'set validation for B1 with the combined array
With WS.Range("B1").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=Join(ARR, ",")
End With
End Sub
在我的示例中,我将范围命名为NUMBER并获得结果:
我遇到了类似的问题。我有一个命名范围 Dyn_ParamList_KillDate
列出日期 1/1/2018, 1/2/2018, etc...
。此动态命名范围由进程填充并更改大小。问题是有时列表会为空,空下拉列表会导致问题。
所以对于我的解决方案我创建了另一个命名范 Range_Writeback_ModelParamDate
总是有价值的。然后我更改了数据验证列表FROM =Dyn_ParamList_KillDate
至 =IF(Dyn_ParamList_KillDate<>"", Dyn_ParamList_KillDate, Range_Writeback_ModelParamDate)
。
一旦我添加了第二个范围,确保它总是有一个值,并将下拉公式更改为使用IF并从任一范围拉出 - 我开始正确地获得基于两个范围的结果。我希望这可以帮助别人。
这个解决方案的想法来自这里: https://www.mrexcel.com/forum/excel-questions/754454-you-may-not-use-reference-operators-array-constants-data-validation.html