对不起我需要一些关于使用VBA过滤下拉列表的帮助我已经有了一个脚本来创建一个使用VBA的下拉列表
Dim LRow As Long
Dim ws As Worksheet
Dim Rng As Range
Set ws = ThisWorkbook.Worksheets("Input_PH")
LRow = Worksheets("PH").Range("A" & Worksheets("PH").Rows.Count).End(xlUp).Row
Set Rng = ws.Range("D5")
With Rng.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:="='PH'!$A$2:$A$" & LRow
现在从下拉列表中我如何使用我在其他列中输入的值来过滤它,
例如E5,我有一个下拉列表中的列表是"考试","退出","离开","去了"当我进入"前"在E5列中,D5中的下拉列表被过滤并变为"考试","退出"
我希望有人可以帮助我。 感谢
答案 0 :(得分:0)
据我所知......
为了让生活更轻松,请在工作表上命名未过滤的列表(" PH")。称之为" drop_list" (没有引号)。这样可以避免在上面的代码段中使用LRow。
将此功能放入您的VBA模块
Function filter_list(the_filter, the_list)
' compile a list of filtered values
Dim filtered_values
For Each list_item In the_list
If InStr(LCase(list_item), LCase(the_filter)) > 0 Or the_filter = "" Then
filtered_values = filtered_values & list_item & ","
End If
Next
' default value if no match
filter_list = ""
' remove trailing ,
If Len(filtered_values) > 1 Then filter_list = Left(filtered_values, Len(filtered_values) - 1)
End Function
在VBA编辑器中,将此子文件放在工作表中(" Input_PH")。它需要到这里来利用Worksheet_Change事件触发器。这不是您的代码段。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range
Dim the_filter As Range, the_list As Range
Set the_filter = Me.Range("E5")
If Target.Address = the_filter.Address Then
Set Rng = Me.Range("D5")
Set the_list = ThisWorkbook.Names("drop_list").RefersToRange
filtered_list = filter_list(the_filter.Cells(1).Value, the_list.Value)
With Rng.Validation
.Delete
If filtered_list <> "" Then .Add Type:=xlValidateList, Formula1:=filtered_list
End With
End If
End Sub
在工作表上输入值(&#34; Input_PH&#34;)时,将触发Worksheet_Change。如果更改在E5中,则更新D5上的验证过滤器。如果E5为空,则验证列表将填入完整列表。无效值会删除验证。