如何使用ComboBox值自动筛选列作为Excel VBA中的条件

时间:2015-01-12 06:33:05

标签: excel vba excel-vba autofilter

我有一个电子表格,其中包含手机品牌和手机型号列表(手机品牌在A栏,手机型号在B栏)

我试图做一个ActiveX程序,允许用户使用ComboBox1的值从ComboBox1和Filter列A中选择一个Phone品牌。

这是我到目前为止所拥有的:

Option Explicit 
Sub AdvFilter() 
    Dim lw As Long 
    Dim lr As Long 
    lw = Range("A" & Rows.Count).End(xlUp).Row 
    Range("A2:A" & lw).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("H1"), Unique:=True 
End Sub 

Private Sub ComboBox1_Change() 
    Dim lr As Long 
    Dim Sel As String 
    lr = Range("H" & Rows.Count).End(xlUp).Row 
    Sel = "H2:H" & lr 
    ComboBox1.ListFillRange = Sel 
End Sub 

我能够使用来自A列的唯一值填充comboBox1,但我无法弄清楚如何使用ComboBox1的值来过滤它。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

到目前为止,您只获得了A列的手机品牌列表,并将它们(独特品牌)写入H列,并将其作为Combobox中的值列表。现在根据组合框中的值,您需要在列中显示属于该品牌的手机型号列表(比如第I列)

第1步:获取从组合框中选择的手机品牌。请参阅此示例VBA - Get Selected Value of Combobox

第2步:获取该手机品牌下的手机型号列表。我们说手机品牌是phone_brand

Sub getPhoneModels()
Dim iCol As Integer
iCol = 1
Dim phone_brand As String
phone_brand=getPhoneBrandFromComboBox()
For i = 1 To Range("B" & Rows.Count).End(xlUp).Row
    If StrComp(.Cells(1, i), phone_brand) = 0 Then
            .Cells(9, iCol) = .Cells(1, i)
            iCol = iCol + 1
    End If
Next i
End Sub

以上代码将浏览B列中的所有手机型号,并在I(9)栏中将品牌价值为phone_brand的内容写入

getPhoneBrandFromComboBox()函数是使用link中给出的帮助在第一步中编写的函数。此功能返回使用comboBox

选择的手机品牌