根据vlookup设置不同的下拉值

时间:2013-10-15 18:50:49

标签: excel

Col A  Col B
Fruit  Grapes
Fruit  Mango 
Fruit  Mango
Veg    Carrot
Veg    Brinjal
Fruit  Banana
Veg    Carrot

我有一个类似于此主题所示的要求 set drop-down values based on vlookup

这样可以正常工作,但是现在对我的要求是在B列中会有重复项,而下拉列表只能显示不同的值。任何人都可以帮助我

请在此处查看文件Requirement

我希望通过纯Excel公式而非VBA代码实现此目的。

1 个答案:

答案 0 :(得分:1)

第1部分 - 这只是展示了如何在下拉列表中创建唯一列表。

这是截图,但目前要求数据上方有一行(?)。这在“数据验证”下拉列表中提供了唯一的项目列表。 (通过事先命名一些范围,可以更容易地创建下面的所有公式。)

enter image description here

E2中的数组公式显示在注释中。使用Ctrl-Shift-Enter输入数组公式,然后根据需要将其向下拖动 - #N / As将开始显示在底部。

天哪,很难形容:)。 COUNTIF基本上生成1和0的序列以指示B列中的行踪,E列中的上一个(上述)值位于B列中。此序列始终以0开头(对于公式中的E2)因为它正在寻找B列中没有出现的空白 - 所以这将抓住第一个项目Grapes。

MATCH然后在0和1的序列中找到前0,这表示值E(在B列中)尚未出现在E列中。

INDEX然后使用此MATCHed值从B列中检索 new 唯一项目。

然后创建一个定义名称(在“公式”选项卡上),它获取E列中的所有值,但仅限于第一次出现的“#”,这表示不再有唯一列表中的值。

然后在数据验证中使用此定义的名称。

第2部分 - 答案(使用VBA)

需要以下VBA代码,以便单击C11:C18中的单元格将更改F1中的值,这将生成下面的唯一列表,该列表填充C11中的数据验证列表:C18。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("C11:C18")) Is Nothing Then
        Sheets("Sheet1").Range("F1").Value = ActiveCell.Offset(0, -1).Value
    End If
End Sub

它需要公式和定义名称,如以下屏幕截图所示。 F2中的公式与F3不同,然后将其复制下来。

F3中公式中的数字10只是一大部分(行)。

enter image description here

  • E栏是唯一的项目。
  • D列是相应的类别。
  • 列F是单元格F1中类别的唯一项目(从列E中提取)。

第3部分 - 没有VBA

在单元格F1中使用公式=INDIRECT(ADDRESS(CELL("row"),CELL("col")-1))。当您单击C11:C18中的单元格时,您需要按 F9 重新计算工作表,这将更新下拉列表。

更新CELL("row")CELL("col")值时需要重新计算。

第4部分 - 不按F9

无需按F9即可实现,但这意味着将所有类别分布在不同的列(G1和右下方的屏幕截图中)。这也可以通过G1中的数组公式=INDEX($A$2:$A$8,MATCH(0,COUNTIF($F$1:F1,$A$2:$A$8),0))来实现。

#N / As也可以从下拉列表中删除,在G2以后的公式中使用IFERROR(),替换为“”。或者,使用:

=OFFSET(Sheet1!$G$1,1,MATCH(Sheet1!B11,Sheet1!$G$1:$J$1,0)-1,MATCH("#",OFFSET(Sheet1!$G$1,1,MATCH(Sheet1!B11,Sheet1!$G$1:$J$1,0)-1,COUNTA(Sheet1!$G:$G)-1,1),-1),1)

因为定义名称Items不仅会删除#N / As,还会删除IFERROR()在下拉列表中留下的冗余(“”)值。 (创建此定义名称时,光标需要位于C11中。)

enter image description here

道歉,但希望有人对此感兴趣。