根据Excel中的2列获取其名称

时间:2017-05-22 02:57:26

标签: excel vba excel-vba

使用VBA的Excel 2013。 我有一个ComboBox,允许我选择RestDays MonTueWed等。
如果我选择Mon,我希望星期一有RD的所有代理都显示在ListBox中。在示例中,我可以显示它,但它只引用单列,我希望能够使用另一列。

Screenshot

这是我的代码:

Private Sub cmbRestDay_Change()
    Dim x, dict
    Dim i As Long
    Dim cnt As Long

    Set mySheet = Sheets("Dashboard")
    ListBox1.Clear
    x = mySheet.Range("A1").CurrentRegion.Value
    Set dict = CreateObject("Scripting.Dictionary")

    If Application.CountIf(mySheet.Columns(2), cmbRestDay.Value) > 0 Then
        For i = 2 To UBound(x, 1)
            If x(i, 2) = cmbRestDay.Value Then
                dict.Item(x(i, 1)) = ""
            End If
        Next i
        ListBox1.List = dict.keys
    Else
        ListBox1.AddItem "Match not found"
    End If
End Sub


Private Sub UserForm_Initialize()
    cmbRestDay.Clear
    With cmbRestDay
        .AddItem ("Mon")
        .AddItem ("Tue")
        .AddItem ("Wed")
        .AddItem ("Thu")
        .AddItem ("Fri")
        .AddItem ("Sat")
        .AddItem ("Sun")
    End With

    cmbMyRD.Clear
    With cmbMyRD
        .AddItem ("Mon")
        .AddItem ("Tue")
        .AddItem ("Wed")
        .AddItem ("Thu")
        .AddItem ("Fri")
        .AddItem ("Sat")
        .AddItem ("Sun")
    End With
End Sub

2 个答案:

答案 0 :(得分:1)

使用Or逻辑运算符:

If Application.CountIf(mySheet.Columns("B:C"), cmbRestDay.Value) > 0 Then
    For i = 2 To UBound(x, 1)
        If x(i, 2) = cmbRestDay.Value Or x(i, 3) = cmbRestDay.Value Then

答案 1 :(得分:0)

Private Sub cmbRestDay_Change()
    Dim x As Integer

    Set mySheet = Sheets("Dashboard")
    ListBox1.Clear

    If Application.CountIf(mySheet.Range("A:B"), "*" & cmbRestDay.Value & "*") > 0 Then
        For x = 2 To Application.CountA(mySheet.Columns(1))
            If mySheet.Cells(x, 2) = cmbRestDay.Value Or mySheet.Cells(x, 3) = cmbRestDay.Value Then
                ListBox1.AddItem (mySheet.Cells(x, 1))
            End If
        Next
    Else
        ListBox1.AddItem ("Match not found")
    End If
End Sub