如何在验证列表中组合范围和确定的值?


0

我有一个带有下拉列表的单元格(使用“数据验证”)。

该列表来自另一个工作表中的命名范围。

我希望下拉列表显示命名范围 另一个预定值。例如,如果范围如下所示:

1
2
3
4

我希望下拉菜单显示:

1
2
3
4
17 (my predefined value)

怎么做到这一点?

Answers:


0

如果要使用验证数据创建列表,则不可能,您将收到错误消息: 您不能将参考运算符(例如联合,交集和范围)或数组常量用于条件格式标准。

因此,我建议您尝试使用代码作为解决方法来帮助您解决此问题。

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并获得结果:

enter image description here


0

我遇到了类似的问题。我有一个命名范围 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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.