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

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

主表

另一个工作表中的产品表(在名称pipe理器中命名为Products ):

产品表

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

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

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

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

然而,这个问题是只有第一个匹配出现在列表中。 换句话说,它可以工作,但是这个列表只有一个项目。 我发现这个post和我正在做的很相似。

我会这样做的方式将涉及帮助列和一个简单的macros,并会做你想做的。

第1部分:VBAmacros

这个macros将对价目表中的项目进行sorting。 每次添加新项目时都应该运行它:

 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

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

产品表

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

在下拉列表中,使用以下公式在列G中添加一个新的帮助器列:

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

下拉表

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

文件的链接附在这里 。

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

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

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

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

我希望这有帮助。