【问题标题】:Excel - Data Validation list from filtered tableExcel - 过滤表中的数据验证列表
【发布时间】:2015-05-03 12:10:06
【问题描述】:

我正在寻找一种从过滤表中提取数据验证列表的方法。 前任。我有一张名为 customers 的表格,其中有一张名为 CustomerList 的表格 列 A=客户 B=地址 C=城市 D=州 在另一个名为 Quote 的工作表上,我有一个客户名称的单元格 C13,它有一个数据验证列表到工作表客户列 A 客户的动态范围。在我的列表中,它显示了所有 1800 名客户,即使我过滤表格以仅显示处于特定状态的客户。我希望能够在表格上设置过滤器以对我的客户进行排序,并让我的数据验证列表仅显示过滤列表中显示的客户。对于我的生活,我无法弄清楚这一点。任何帮助将不胜感激。 TIA。

【问题讨论】:

  • 当我们制作DV时,是否应该删除重复值??

标签: excel validation


【解决方案1】:

在工作表 Customers 中,选择一些单元格并输入:

=SUBTOTAL(103,A:A)

每次更改A列的过滤器时,都会重新计算此公式。

客户工作表代码区域,安装以下事件宏:

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

每当修改工作表 Customers 上的过滤器时,工作表 Quotes 上单元格 C13 的数据验证都会更新。

【讨论】:

  • 这类作品。当我有一个包含逗号的客户名称时,在我的下拉菜单中显示 Badger Pressure Control, LLC,它显示为单独的条目。 Badger Pressure Controls 和 LLC 作为单独的条目。此外,当我按德克萨斯州排序时,它出于某种原因停止了 M 中的列表。认为这与客户的命名方式有关
  • 当按 TX 过滤时,它在我的 Mountain Supply 列表中停止,而在客户列表中它是 Mountain Supply 服务,但不知道为什么。我删除了该条目,它在下一个条目上停止。当按德克萨斯州排序时,我在该单元格中有 640 个计数,如果有帮助,数据验证列表似乎停止在 348 个计数。虽然当我没有过滤器时,它会显示所有 1800 个客户
  • 如果我没有过滤器,当我清除过滤器并显示整个表格时会出现错误`。添加类型:=xlValidateList,AlertStyle:=xlValidAlertStop,运算符:= _ xlBetween,Formula1:=DVList `
  • 悬停时处于调试模式 xlValidateList=3 xlValidAlertStop=1 xlBetween=1 如果有帮助的话
  • @JasonAdams 你发现了一个真正的错误。 逗号分隔列表中的项目本身不能包含逗号。我们需要使用 helper column 代替.....你还好吗?使用辅助列??
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-18
  • 1970-01-01
  • 1970-01-01
  • 2015-11-29
  • 1970-01-01
  • 1970-01-01
  • 2011-02-01
相关资源
最近更新 更多