我想通过从下拉菜单中选择来过滤Excel表格。
工作表布局如下所示:
___________|_Product1_|_Product2_|_Product3_|_Product4_|
Shop1 | X | X | | |
Shop2 | | X | X | |
Shop3 | X | | | X |
| | | | |
Ingredient1| | X | | X |
Ingredient2| X | X | X | X |
Ingredient3| X | | X | |
我希望有一个所有商店的下拉菜单,根据选择,只有标有“X”的产品应该是可见的(所有其他列应该被隐藏)。
使用数据验证列表,但无法实现内部列出的商店名称的正常下拉列表。
答案 0 :(得分:0)
对于那些来到这个网站寻求相同答案的人来说,我现在就这样做了,它对我来说非常好。可能不是最好的解决方案,但至少它是功能性的:
创建一个包含所有商店(Shop1,Shop2,Shop3)和“全部显示”条目的数据验证列表。根据选择,我调用另一个宏。为此,我将此代码添加到工作表中(右键单击工作表名称 - >查看代码):
Private Sub Worksheet_Change(ByVal Target As Range)
'$F$2 points to the field containing the data validation list
If Target.Address(True, True) = "$F$2" Then
Select Case Target
'this matches against the shop name (string) in the data val. list
Case "Shop1"
'this is the macro name
Call Shop1
Case "Shop2"
Call Shop2
Case "Shop3"
Call Shop3
Case "Show all"
Call ShowAll
Case Else
'Do nothing
End Select
End If
End Sub
使用以下代码创建3个名为Shop1,Shop2,Shop3和ShowAll的不同宏:
'name your function
Sub Shop1()
Dim LastColumn As Long, x As Long
LastColumn = ActiveSheet.Cells(3, Columns.Count).End(xlToLeft).Column
'begins to count at column number 2
For x = 2 To LastColumn
'counts all X in the row number 7
If UCase(Cells(7, x).Value) = "X" Then
Columns(x).Hidden = False
Else
Columns(x).Hidden = True
End If
Next
End Sub
我只是将行号更改为工作表中每个宏的匹配值(单元格( 7 ,x).Value) 对于'show all'事件,我刚刚插入了这个:
Sub ShowAll()
For x = 4 To 40
Columns(x).Hidden = False
Next
End Sub