从数据匹配条件创建列表

时间:2014-03-12 12:04:26

标签: arrays excel list

我有一个由2列组成的表。 A列保存客户名称列,B列保存项目名称。

我需要创建List(用于数据验证使用),其中包含与特定客户名称相关的所有项目。

客户手动输入客户名称,根据输入的客户名称,列表应更新为相应的项目。

如何创建此类列表?

问候

2 个答案:

答案 0 :(得分:0)

通过串联制作DV列表并将其存储为全局字符串变量。一旦创建,它就可以用作DV标准。

制作名单:

Dim DVList As String

Sub MakeDVList()
    Dim N As Long, I As Long
    With Sheets("Sheet1")
    N = .Cells(Rows.Count, "A").End(xlUp).Row
    For I = 2 To N
        If .Cells(I, "A").Value = "jim" Then
            DVList = DVList & "," & .Cells(I, "B").Value
        End If
    Next I
    DVList = Mid(DVList, 2)
    End With
End Sub

这假设名称/项目数据从第2行开始

运行完毕后,选择一个单元格并运行:

Sub SetDV()
    With ActiveCell.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:=DVList
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
End Sub

理想情况下,subs和global都应该在同一个模块中。

答案 1 :(得分:0)

如果您不介意使用一个辅助列

,您可以在没有VBA的情况下解决它

在示例中(见图)C1包含名称,D列是aux列,ComboBox在E1中。

在D1中写下这个数组公式(不要忘记用Ctrl Shift Enter输入它)

=IFERROR(INDEX($B$2:$B$10;SMALL(IF($A$2:$A$10=$C$1;ROW($A$2:$A$10)-ROW($A$2)+1;"");ROWS($A$1:A1)));"")

将此公式复制到D10(或至少,当你得到第一个空格时)

现在在E1中输入数据验证,列表和来源输入公式:

=OFFSET(D1;0;0;MATCH("";D:D;0)-1;1)

根据您的区域设置,您可能需要替换“;”通过“,”

enter image description here