Excel,按条件创建动态数据验证下拉列表

时间:2015-02-01 17:43:35

标签: excel vba excel-vba

我在Excel表格中有大量的食物信息。例如,两列:

Apples Fruit
Beets Vegetable
Spinach Vegetable
Cheese Dairy

我有另一张带有数据验证下拉列表的表格,您可以从食物信息表中选择食物。但是,我希望能够缩小搜索字段,允许用户同时选择一个通知下拉列表的类别。

例如,两列(用户在左栏输入“Fruit”,可能来自包含Fruit,Vegetable,Dairy等项目的下拉列表):

Fruit (dropdown that contains fruit items from the food info sheet)

我不知道如何让数据验证字段说“选择所有食品名称(来自食品信息表),其中类别信息(在食品信息表上)等于用户指定的类别(在食品信息表上)下拉菜单。“

1 个答案:

答案 0 :(得分:0)

Sheet2 就像:

enter image description here

Sheet1 单元格 A1 中放入通常的数据验证,包括值水果,蔬菜,乳制品
然后进行以下事件 Sheet1 工作表代码区域中的宏:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim A1 As Range, B1 As Range, sDV As String
    Dim N As Long, i As Long
    Set A1 = Range("A1")
    Set B1 = Range("B1")

    If Target.Count > 1 Then Exit Sub
    If Intersect(Target, A1) Is Nothing Then Exit Sub

    v = A1.Value
    sDV = ""
    With Sheets("Sheet2")
        N = .Cells(Rows.Count, "A").End(xlUp).Row
        For i = 1 To N
            If v = .Cells(i, "B").Value Then
                sDV = sDV & "," & .Cells(i, "A").Value
            End If
        Next i
        sDV = Mid(sDV, 2)
    End With

    Application.EnableEvents = False
    With B1.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:=sDV
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
    Application.EnableEvents = True
End Sub

现在每当您在单元格 A1 中选择一个类别时,将为单元格 B1设置正确的DV。

因为它是工作表代码,所以很容易安装和自动使用:

  1. 右键单击Excel窗口底部附近的选项卡名称
  2. 选择查看代码 - 这会打开一个VBE窗口
  3. 粘贴内容并关闭VBE窗口
  4. 如果您有任何疑虑,请先在试用工作表上试用。

    如果保存工作簿,宏将随之保存。 如果您在2003年之后使用的是Excel版本,则必须保存 该文件为.xlsm而不是.xlsx

    删除宏:

    1. 按上述方式调出VBE窗口
    2. 清除代码
    3. 关闭VBE窗口
    4. 要了解有关宏的更多信息,请参阅:

      http://www.mvps.org/dmcritchie/excel/getstarted.htm

      http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

      要了解有关事件宏(工作表代码)的更多信息,请参阅:

      http://www.mvps.org/dmcritchie/excel/event.htm

      必须启用宏才能使其生效!