首页 > 解决方案 > 从 excel 中的多项选择下拉列表中检索值

问题描述

我正在尝试从我的下拉菜单中进行计算。这就是我的下拉菜单的样子。类别

这些是与我的下拉菜单关联的值。类别 类别值

我为多选添加了 VBA 代码,还添加了简单的 Vlookup 公式来检索类别的值。

=VLOOKUP(E2;Sheet2!I2:J5;2;)

使用 VBA 代码,我可以选择所有三个类别,并在以后删除所选类别。但我无法检索所选类别的总和。例如,如果客户选择 AAA 和 CCC 类别,他/她应该能够看到总和为 4。此外,如果客户首先选择所有三个类别,然后删除其中一个类别,那么总和也应该得到更新。我不知道如何更新我的 Vlookup 公式以获得总和。

这是我用于多项选择的 VBA 代码。

Private Sub Worksheet_Change(ByVal Target As Range)
    'Updated: 2016/4/12
    Dim xRng As Range
    Dim xValue1 As String
    Dim xValue2 As String
    If Target.Count > 1 Then Exit Sub
    On Error Resume Next
    Set xRng = Cells.SpecialCells(xlCellTypeAllValidation)
    If xRng Is Nothing Then Exit Sub
    Application.EnableEvents = False
    If Not Application.Intersect(Target, xRng) Is Nothing Then
        xValue2 = Target.Value
        Application.Undo
        xValue1 = Target.Value
        Target.Value = xValue2
        If xValue1 <> "" Then
            If xValue2 <> "" Then
                '                If xValue1 = xValue2 Or _
                '                   InStr(1, xValue1, ", " & xValue2) Or _
                InStr(1, xValue1, xValue2 & ",") Then
                If InStr(1, xValue1, xValue2 & ",") > 0 Then
                    xValue1 = Replace(xValue1, xValue2 & ", ", "") ' If it's in the middle with comma
                    Target.Value = xValue1
                    GoTo jumpOut
                End If
                If InStr(1, xValue1, ", " & xValue2) > 0 Then
                    xValue1 = Replace(xValue1, ", " & xValue2, "") ' If it's at the end with a comma in front of it
                    Target.Value = xValue1
                    GoTo jumpOut
                End If
                If xValue1 = xValue2 Then        ' If it is the only item in string
                    xValue1 = ""
                    Target.Value = xValue1
                    GoTo jumpOut
                End If
                Target.Value = xValue1 & ", " & xValue2
            End If
            jumpOut:
        End If
    End If
    Application.EnableEvents = True
End Sub

标签: excelvbadropdown

解决方案


我会为求和部分做类似的事情。我有我的参考表 A1:B4。我打电话给使用Get_Sum("A,C,D")

Function Get_Sum(strInput As String) As Double

Dim a() As String
Dim v As Variant
Dim r As Excel.Range
Dim l As Long

a = Split(strInput, ",")
Set r = Range("a1:b4")

Get_Sum = 0

For Each v In a
    l = Application.WorksheetFunction.Match(v, r.Columns(1), 0)
    Get_Sum = Get_Sum + r.Cells(l, 2)
Next v

Set r = Nothing
Erase a

End Function

像这样打电话

Private Sub Worksheet_Change(ByVal Target As Range)

    '   Where A5 is the validated cell and B5 is the sum result

    If Target = Range("a5") Then
        Range("b5").value = Get_Sum (Target.Value)
    End If


    End Sub

推荐阅读