我在Excel表格中有大量的食物信息。例如,两列:
Apples Fruit
Beets Vegetable
Spinach Vegetable
Cheese Dairy
我有另一张带有数据验证下拉列表的表格,您可以从食物信息表中选择食物。但是,我希望能够缩小搜索字段,允许用户同时选择一个通知下拉列表的类别。
例如,两列(用户在左栏输入“Fruit”,可能来自包含Fruit,Vegetable,Dairy等项目的下拉列表):
Fruit (dropdown that contains fruit items from the food info sheet)
我不知道如何让数据验证字段说“选择所有食品名称(来自食品信息表),其中类别信息(在食品信息表上)等于用户指定的类别(在食品信息表上)下拉菜单。“
答案 0 :(得分:0)
说 Sheet2 就像:
在 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。
因为它是工作表代码,所以很容易安装和自动使用:
如果您有任何疑虑,请先在试用工作表上试用。
如果保存工作簿,宏将随之保存。 如果您在2003年之后使用的是Excel版本,则必须保存 该文件为.xlsm而不是.xlsx
删除宏:
要了解有关宏的更多信息,请参阅:
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
必须启用宏才能使其生效!