首页 文章

Excel:基于其他工作表的键值的下拉列表

提问于
浏览
0

一段时间以来,我一直在努力解决这个问题

我有两张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

    你需要使用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.在"refersTo" =GetFruitList() (公式选项卡>>名称管理器)中为工作簿添加名称"FruitList"

    3.使用"Allow >> List"选项设置输入单元格的数据验证,并使用 =FruitList 设置"Source"

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

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

相关问题