我在一张工作表上有几个不相邻的单元格,我想将它们用作另一张工作表单元格中数据验证的源。但是,数据验证似乎本身不允许这样做。
因此,我尝试了一种解决方法,即将公式放入另一张表上的一些相邻单元格中,这些单元格将引用我想要的第一张表中的值。然后,我命名了第二个范围并在“数据验证源”字段中引用该名称。
现在我遇到一个问题,如果第一张工作表中的单元格之一是空白的,则第二张工作表中引用第一张工作表中的空白的单元格将显示出来,0
而不是空白。我尝试通过执行类似操作来解决这个问题=IF(Sheet1!A1="","",Sheet1!A1)
。然而,这并没有实际上使公式结果与空白单元格相同。
当我希望我的数据验证包含一个单元格内下拉列表时,这一切就变得很成问题。我在这里的选择似乎是0
在源数据中有空白的地方在下拉列表中添加一个空行。如果空白是真正的空白,就不会发生这种情况。
那么,有没有什么办法可以解决这个问题呢?
例子:
工作表1
A1= Value1
A5= Value2
A9= Value3
A13= Value4
A17=(单元格为空白)
A21=(单元格为空白)
工作表2
A1 =Sheet1!A1
(返回Value1
)
A2 =Sheet1!A5
(返回Value2
)
A3 =Sheet1!A9
(返回Value3
)
A4 =Sheet1!A13
(返回Value4
)
A5 =Sheet1!A17
(返回0
)
A6 =IF(Sheet1!A21="","",Sheet1!A21)
(显示空白)
Sheet2!A1:A6
名为Validation
。在 处Sheet3!A1
,数据验证与源和单元格内下拉菜单一起应用=Validation
。单元格内下拉菜单显示:
值1
值2
值3
值4
0
(含空白单元格)
在这些条件下,我正在寻找一种配置,该配置将导致下拉菜单仅在填充时Sheet3!A1
显示,同时保持可用。或者,下拉菜单应仅在填充时显示,同时保持可用。Sheet2!A1:A4
Sheet2!A5:A6
Sheet3!A1
Sheet1!A1,Sheet1!A5,Sheet1!A9,Sheet1!A13
Sheet1!A17,Sheet1!A21
看来我需要一种方法来:
Sheet1
在我的数据验证源中直接处理不相邻的单元格,
或者Validation
将范围内的单元格获取Sheet2
到实际上当目标Sheet1
是空白时,返回空白单元格。
答案1
使用您原帖中描述的方法如何使数据验证下拉菜单排除空白。
将其与以下方法结合起来:
Public Sub ClearDataValidation(destrng As Range)
destrng.Validation.Delete
End Sub
Public Sub LoadDataValidation(srcrng As Range, destrng As Range)
'Verify a 1x1 sized Range was passed
If destrng.Rows.Count <> 1 Or destrng.Columns.Count <> 1 Then
InvalidValue destrng.Worksheet, "LoadDataValidation", _
"Range: " & destrng.name & " was passed to method. This method expects a " & vbCrLf & vbCrLf & _
" 1 Row x 1 Column Range to be passed. Anything outside of the 1x1 " & vbCrLf & vbCrLf & _
"size will result in invalid conditions"
Exit Sub
End If
With Range(destrng.Address).Validation
.Delete
.Add xlValidateList, xlValidAlertStop, xlBetween, DistinctValues(srcrng)
End With
End Sub
用法:
LoadDataValidation Range("Table1[column1]"), Range("destinationCell")