Excel - 根据与特定文本匹配的行中的值下拉列表值

时间:2016-03-06 18:19:38

标签: excel excel-vba excel-formula vba

我在一个Excel工作表中有一个主表:

Main table

另一个工作表中的Products表(名称管理器中名为Products):

Products table

我想要的是从Products表中查找主表的下拉框中可用的值。例如,在第一个屏幕截图中选择的单元格旁边有“模型”一词。因此,我想浏览产品表,查找“类型”列中包含“模型”一词的任何行。当我们找到它时,我希望“名称”列中的值在下拉列表中可用。我希望在Products表中的每一行都使用'type'列中的'model'。

毕竟,我们移动到第一个范围中的下一个单元格,它旁边有“图形”。这一次,我想通过在Products表中查找“图形”。等等。

在尝试这样做时,我在名称管理器中使用了这个公式,并将其用作单元格下拉列表的来源:

  

= INDEX(产品[[#数据]中,[名称]],MATCH( “模型”,产品[[#数据]中,[类型]],0))

然而,问题在于列表中只显示第一个匹配项。换句话说,它可以工作,但列表只有一个项目。我发现this帖子与我正在尝试的内容非常相似。

1 个答案:

答案 0 :(得分:0)

我这样做会涉及帮助列和一个简单的宏,并且会做你想做的事。

第1部分:VBA宏

此宏将对价目表中的项目进行排序。每次添加新项目时都应该运行它:

Sub Sorter()

    Sheets("Products").select
    Range("A:D").Select
    ActiveWorkbook.Worksheets("Products").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Products").Sort.SortFields.Add Key:=Range("B:B") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Products").Sort.SortFields.Add Key:=Range("C:C") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Products").Sort
        .SetRange Range("A:D")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

第2部分:产品助手列:

在产品表中,在F列中插入以下公式:

F栏(单元格F2):=B2&"-"&C2

如果在不同类别下有多个名称相似的商品,此公式将用于获取商品的价格。

products sheet

第3部分:下拉列表帮助列

在下拉列表表格中,使用以下公式在G列中添加新的辅助列:

="Products!$C"&MATCH($A2,Products!$B:$B,0)&":$C"&SUM(COUNTIF(Products!$B:$B,$A2),MATCH($A2,Products!$B:$B,0)-1)

Dropdown Sheet

数据验证公式应该使用间接查看单元格G中显示的范围(例如:=INDIRECT($G2)

该文件的链接附有here

您可以隐藏辅助列,但请确保在添加新项目时拖动公式。

要获得商品价格,请使用以下公式:

=SUMIF(Products!$F:$F,'Drop Down'!$A2&"-"&'Drop Down'!$B2,Products!$D:$D)

这将确保如果2个类别具有相似的项目名称,则价格将用于预期的项目。

我希望这会有所帮助。