我正在寻找一种从过滤表中提取数据验证列表的方法。 防爆。我有一张名为customers的工作表,其中包含一个名为CustomerList的表 A列=客户B =地址C =城市D =州 在另一张名为Quote的工作表中,我有一个客户名称的单元格C13,它具有一个动态范围的Sheet Customers列A Customer的数据验证列表。在我的列表中,它显示了所有1800个客户,即使我过滤表格只显示某个州的客户。我希望能够在表格上设置过滤器来对我的客户进行排序,并让我的数据验证列表仅显示过滤列表中显示的客户。对于我的生活,我无法弄清楚这一点。任何帮助将不胜感激。 TIA。
答案 0 :(得分:0)
在工作表 Customers 中,选择一些单元格并输入:
=SUBTOTAL(103,A:A)
每次为 A 列更改过滤器时,都会重新计算此公式。
在 Customers 工作表代码区域中,安装以下事件宏:
Private Sub Worksheet_Calculate()
Call makeDV
End Sub
在标准模块中,安装以下代码:
Public DVList As String
Public Sub makeDV()
Dim A As Range, r As Range
Dim c As Collection, v As Variant
Set c = New Collection
Set A = Intersect(Range("A2:A" & Rows.Count), ActiveSheet.UsedRange).Cells.SpecialCells(xlCellTypeVisible)
DVList = ""
On Error Resume Next
For Each r In A
v = r.Value
If v <> "" Then
c.Add v, CStr(v)
If Err.Number = 0 Then
DVList = DVList & "," & v
Else
Err.Clear
End If
End If
Next r
If Len(DVList) <> 0 Then DVList = Mid(DVList, 2)
On Error GoTo 0
Dim Quote As Worksheet
Set Quote = Sheets("Quote")
With Quote.Range("C13").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=DVList
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End Sub
每当在工作表客户上修改过滤器时,工作表报价上的单元格 C13 的数据验证将会更新。