Excel,按条件创builddynamic数据validation下拉菜单

我有一个Excel表中的食物信息大名单。 例如,两列:

Apples Fruit Beets Vegetable Spinach Vegetable Cheese Dairy 

我有一个数据validation下拉列表,让您从食物信息表中select食物。 但是,我希望能够通过允许用户也select通知下拉的​​类别来缩小search字段。

例如,两列(用户在左栏input“水果”,也许从水果,蔬菜,乳制品等项目的下拉菜单中input):

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

我不知道如何使数据validation字段“select所有食品名称(从食品信息表),其中类别信息(在食品信息表上)等于用户指定的类别(在表单上的下拉菜单)“。

Sheet2就像:

在这里输入图像说明

Sheet1单元格A1中放置了通常的数据validation,包括水果,蔬菜,乳制品的值
然后将下面的事件macros放在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中select一个类别,都将为单元格B1设置适当的DV

因为它是工作表代码,所以安装和自动使用非常简单:

  1. 右键单击Excel窗口底部附近的选项卡名称
  2. select查看代码 – 这会popup一个VBE窗口
  3. 粘贴东西,closuresVBE窗口

如果您有任何疑问,请先在试用工作表上尝试。

如果您保存该工作簿,该macros将与它一起保存。 如果您在2003年以后使用的是Excel版本,则必须将该文件另存为.xlsm而不是.xlsx

要删除macros:

  1. 调出上面的VBE窗口
  2. 清除代码
  3. closuresVBE窗口

要了解有关macros的更多信息,请参阅:

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

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

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

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

macros必须启用这个工作!