【问题标题】:Populate Excel Data Validation Drop-Down From Data Range Condition Using VBA使用 VBA 从数据范围条件填充 Excel 数据验证下拉列表
【发布时间】:2016-07-05 17:36:23
【问题描述】:

我正在构建一个电子表格,其中包含供用户选择的数据验证下拉菜单。下拉列表是根据一些预定义的条件从(隐藏)选项卡上的命名范围填充的。

数据范围(当前>500行)的提取是

| Type | Code | Description      | Start Date | End Date   | Status |
| A    | 001  | IT               | 01/01/2016 | 31/12/2016 | O      |
| A    | 002  | HR               | 31/10/2017 | 31/12/2018 | O      |
| A    | 003  | Payrol           | 01/01/2016 | 31/12/2016 | O      |
| A    | 004  | Marketing        | 01/01/2016 | 31/12/2016 | C      |
| B    | 110  | Technical Review | 01/01/2016 | 31/12/2016 | O      |

并且在命名范围“代码数据”中

我想使用以下数据范围中的 VBA 使用代码列填充数据验证下拉列表:

  • 类型 = A
  • 状态 = O
  • 开始日期
  • 结束日期 > 今天的日期

我曾尝试使用 ODBC/SQL,它运行良好但启动速度很慢 - 我假设它在查询之前连接到数据范围

有更快/更好的方法吗?

【问题讨论】:

  • 一定要用vba吗?命名范围会做同样的事情,而且速度更快
  • 您为什么使用运行良好但启动缓慢的 ODBC/SQL?为什么不使用命名范围填充数据验证下拉列表?
  • 如何根据较大数据集/范围的条件为数据创建命名范围?
  • 目前还不清楚您要使用哪些信息填充 hte 数据验证列表。我了解过滤,但您要使用哪一列填充列表?
  • 道歉 - 代码栏,将更新帖子以使其更加清晰。

标签: vba excel


【解决方案1】:

我认为数据验证需要一个连续的范围,因此您可能需要先过滤然后将结果单元格移动到其他地方,或者数据验证将包括隐藏的单元格,类似这样(显然修改为您自己的工作表和范围):

Sub someMacro()
With Sheets("Sheet1")
    With .Range("a1:f6")
        .AutoFilter Field:=1, Criteria1:="A"
        .AutoFilter Field:=6, Criteria1:="O"
        .AutoFilter Field:=4, Criteria1:="<" & Date
        .AutoFilter Field:=5, Criteria1:=">" & Date
    End With
    .Range(.Range("b2"), .Range("b2").End(xlDown)).Copy
    .Range("g1").PasteSpecial xlPasteValues 'Put this whereever is suitable, don't forget to add something in to delete this with each run
    .Range("h1").Validation.Add Type:=xlValidateList, Formula1:="='Sheet1'!" & .Range(.Range("g1"), .Range("g1").End(xlDown)).Address 'I've validated cell h1, change this to whatever
End With
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    相关资源
    最近更新 更多