2014-10-30 33 views
0

我已与该要求挣扎一段时间Excel中:基于来自其它片

我已经两个Excel片作为遵循

Sheet 1中(主片)

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 

我想要一个下拉列表在sheets1(fruittype列)应基于Sheet2的键值

我知道,下拉列表可以通过使用“数据有效性”

但困难的部分很容易做到的是如何让此下拉列表只显示数据根据键值

+0

VLOOKUP在你的标签 - 看来VLOOKUP是这个答案。如果没有请进一步解释 – 2014-10-30 04:07:56

+0

VLOOKUP是没用的。 OP想要填充有效值的下拉列表,而不是复制单个值。我不认为有这种外部VBA的解决方案。 – MattClarke 2014-10-30 04:19:56

回答

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.添加一个名为“FruitList”到“引用关联”把=GetFruitList()(公式选项卡>>名称管理器)

3.设置了输入单元的数据验证,使用“允许列表>>您的工作簿“选项,=FruitList代表”源代码“

这里假设您的查找列表在Sheet2上(我在示例中使用表单代码,但可以使用tab名称),并且列表在第一列。

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