Excel:根据另一个工作表的键值下拉列表

时间:2014-10-30 03:58:15

标签: excel list vlookup

我一直在努力解决这个问题

我有两张excel表格如下

Sheet1(主表)

Fruit   |  Fruit Type
---------------------
apple   |  ??????  <----- should have drop down list based on key value from Sheet2
apple   |  ??????  <----- should have drop down list based on key value from Sheet2
banana  |  ??????  <----- should have drop down list based on key value from Sheet2
apple   |  ??????  <----- should have drop down list based on key value from Sheet2
banana  |  ??????  <----- should have drop down list based on key value from Sheet2

Sheet2(水果类型)

Key     |  Value
---------------------
apple   |  Red Apple
apple   |  Organic Apple
apple   |  Green Apple
banana  |  African Banana
banana  |  Yemen's Banana

我想在sheet1(fruittype列)中有一个下拉列表,该列表应基于Sheet2键值

我知道使用“数据验证”

可以轻松完成下拉列表

但困难的部分是如何使此下拉列表仅显示基于键值的数据

1 个答案:

答案 0 :(得分:0)

你需要使用VBA - 这是一种可行的方法(虽然我不确定它是最好的......)

1.将这样的函数添加到常规模块

  Function GetFruitList()
    Dim m, f, rngList, rng As Range
    Set rngList = Sheet2.Range("A:A")

    f = Application.Caller.Offset(0, -1).Value  'what fruit ?
    m = Application.Match(f, rngList, 0)        'is fruit in list ?
    If Not IsError(m) Then
        Set GetFruitList = rngList.Cells(m).Resize( _
                  Application.CountIf(rngList, f), 1).Offset(0, 1)
    End If
  End Function

2.在“referTo”中添加名称“FruitList”到“referTo”放=GetFruitList()(公式标签&gt;&gt;名称管理员)

3.使用“允许&gt;&gt;列表”选项设置输入单元格的数据验证,并使用=FruitList设置“源”

这假设您的查找列表在Sheet2上(我在示例中使用了工作表代码,但您可以使用选项卡名称),并且列表在第一列上排序。

它起作用(至少它对我有用!)因为函数GetFruitList在被点击的特定单元格的上下文中被调用 - 所以我们可以使用Application.Caller来获取它,然后向左偏移一个单元格,找出我们需要返回值的类别项目。