是否可以将filter应用于数据validation下拉列表?

我有一个下拉列表,显示了另一个工作表的合并零件库。 这个工作表是不断更新的,直到我们可以得到一个工作的数据库,所以部分列表function的方式或多或less地被设置。

零件库是通过使用查询购买的,如下所示: 在这里输入图像说明

我已经连接了一些数据来形成一个名为TableTab的表,如下所示: 在这里输入图像说明

指定的表格形成详细的数据validation列表,如下所示: 在这里输入图像说明

为了让工作表自动填充,我缩短了数据validation列表的输出,只输出Part Index ,如下所示:

 Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next Dim textVal As String Dim strVal As String strVal = Target.Value If Target.Column = 2 Then textVal = Left(strVal, 9) Target.Value = textVal End If End Sub 

下面的IF语句允许我弄清楚什么types的产品部分=IF(B2>0,IF(LEFT(D2,1)="1","Assembly",IF(LEFT(D2,1)="2","Sub-Assembly",IF(LEFT(D2,1)="3","Software",IF(LEFT(D2,1)="4","Hardware",IF(LEFT(D2,1)="5","Chemical",IF(LEFT(D2,1)="6","Spare",IF(LEFT(D2,1)="7","Spare",IF(LEFT(D2,1)="8","Document",IF(LEFT(D2,1)="9","Misc",""))))))))),"")产生以下列: 在这里输入图像说明

我想使用类似于上面的IF语句来过滤下拉列表来select部分,即我通过工作表顶部的filter,然后过滤Part List下拉列表的filter预选Assembly Type各自的types。

这可能吗? 如果是的话,我怎么能这样做呢?

谢谢,

更新的答案

我写了一个VBA的例子,我认为会为你工作。 你可以在这里下载一个示例,但是如果你喜欢的话,以及将来的读者,你可以build立自己的工作表基于我的例子下面。

对于这个例子,你需要如下设置你的工作簿。

第一张

第二张

第三张

复制并粘贴到“示例”工作表代码中。

  Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim AssemblyFilter As Range, PartsDropDown As Range Dim strList As String, strAssemblyFilter As String Dim i As Long Set AssemblyFilter = Range("B1") 'Set this to the cell that has the Assembly Filter strAssemblyFilter = AssemblyFilter.Value If Not Intersect(Target, AssemblyFilter) Is Nothing Then 'Only Run following code when Assembly Filter cell has changed strList = "" With Sheets("Parts Library") 'Sheet with Parts Library For i = 1 To .Cells(Rows.Count, "A").End(xlUp).Row If strAssemblyFilter = .Cells(i, "B").Value Then 'Compare Assembly Filter to values in Column "B" strList = strList & "," & .Cells(i, "A").Value 'If filter matches, then append this to the data Validation List End If Next i strList = Mid(strList, 2) 'Chop off leading comma End With 'Apply Data Validation to this Range (starting at cell B4 and ending at the last row with data in column A) Set PartsDropDown = Range("B4:B" & Cells(Rows.Count, "A").End(xlUp).Row) Application.EnableEvents = False With PartsDropDown.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:=strList 'Pass in Validation List created above .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .ShowInput = True .ShowError = True End With Application.EnableEvents = True End If End Sub 

当您更改“组件filter”和“ Worksheet_Change事件时,代码首先根据“组件filter”生成“部件列表”,然后重置并创build一个新的validationfilter,从B4开始,最后一行结束于A列中的数据。可以根据需要进行调整,甚至可以根据需要对范围进行硬编码。

希望这可以帮助,让我知道如果你有任何麻烦修改这个供你使用。