我有一种情况,定义的表结构会根据控件类型发生变化(例如,它是产品品牌)。在该表中,需要使用两列/字段来填充同一工作表上的两个数据验证单元格。这些单元格位于表格上方,“理想情况下”将用于根据填充数据验证单元格的数据过滤表格的信息。
数据验证列表方法逻辑:
Dim str As String
str = Join(UniqueValues(ws,srcrng), ",")
Dim val As Excel.Validation
Set val = range(destrng).Validation
val.Delete
val.Add xlValidateList, xlValidAlertStop, xlBetween, str
- ws:@srcrng 所在的工作表
- srcrng:从中提取唯一值的范围
- destrng:数据验证将附加到的范围。这将被控制为只有一个单元格,如果有超过 1 行和 1 列,则会出错。
上面的方法被封装在一个传递两个参数的方法Table1[Column1]
和DataValidationCell1
VBA中。
只是为了避免任何问题,这里是方法UniqueValues
逻辑:
Function UniqueValues(ws As Worksheet, col As String) As Variant
Dim rng As range: Set rng = ws.range(col)
Dim dict As New Scripting.Dictionary
If Not (rng Is Nothing) Then
Dim cell As range, val As String
For Each cell In rng.Cells
val = CStr(cell.Value)
If InStr(1, val, ",") Then
val = Replace(val, ",", Chr(130)) <-- Handles the fact i have commas in the field
End If
If Not dict.Exists(val) Then
dict.Add val, val
End If
Next cell
End If
'Return value as Variant Array
UniqueValues = dict.Items
End Function
问题:
- 我如何解释数据验证更改?
- 我可以使用数据验证来过滤表吗?
- 由于数据透视表不是一个合理的选项,由于信息的性质,如果数据验证过滤在功能上不可行,我还有什么选择?
在 #3 上,如果可能的话,我不想放置下拉列表。