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代码实现此目的。
答案 0 :(得分:1)
第1部分 - 这只是展示了如何在下拉列表中创建唯一列表。
这是截图,但目前要求数据上方有一行(?)。这在“数据验证”下拉列表中提供了唯一的项目列表。 (通过事先命名一些范围,可以更容易地创建下面的所有公式。)
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只是一大部分(行)。
第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中。)
道歉,但希望有人对此感兴趣。