Excel: Vlookup in named range and return a value outside of range
Excel: Vlookup in named range and return a value outside of range
我需要找到一种方法来搜索命名范围内的值并 return 该范围旁边的列。原因很简单:我确实在 A 列中使用命名范围的列表验证。在此列表中有产品类型的完整名称(例如继电器、接触器、外壳),我需要 return 来自的简短描述B 列(例如 Rly、Cont、Encl),这样当用户搜索列表时,很容易找到他要找的东西。我知道我可以将我的范围扩展到 $A:$B 但如果我这样做,那么 $B 的所有值都将包含在列表中...
这显示了一种找出我需要什么的方法:=VLOOKUP(A1;"RANGE+1C",2,0)
我尝试了很多使用偏移量和索引的方法,但找不到这样做的方法......我什至认为可以使用相对参考(例如 =VLOOKUP(A1,Description;1"RC[1]",0) 或类似的东西...
还查看了 Google 以查找一些信息,但它似乎非常陌生...
我需要在公式中而不是在 VBA 中执行此操作。
这里是 link 示例文件:
http://www.filedropper.com/descriptionbuilder
有什么提示吗?
谢谢!
您可能需要 MATCH & INDEX 组合而不是 VLOOKUP。
MATCH 是一个函数,它告诉您从所选列表中找到重复值的行号 - 它就像 VLOOKUP 的一半。 INDEX 是一个函数,它根据您给它的位置 # 从列表中提取一个值 - 它就像 VLOOKUP 的另一半。
我看到您在 A 列中的一个范围与您的 ID 数据是描述 - 我假设 B 列没有 'named' 与您的范围一致的范围。我假设 B 列有其他数据,并且 A 列从第一行之后的某处开始 [具体来说,我假设它从第 5 行开始]。公式看起来像这样:
=INDEX(B:B,ROW(A5)-1+MATCH(A1,Description,0))
这表示:在描述中找到与 A1 中的文本匹配的行#。然后添加 A5 - 1 的行号(然后将 Description 的顶部与 B 列的顶部对齐)。然后从 B 列中提取该值。
使用 VLOOKUP 和 OFFSET 的替代方法
另一种方法是首先定义 Description 中有多少行,然后使用该信息和 OFFSET 函数创建一个新区域,该区域本质上代表 Description 但跨越 A 列和 B 列,而不仅仅是 A 列。这看起来如下(同样,假设描述从 A5 开始):
=VLOOKUP(A1,OFFSET(A5,0,0,ROWS(Description),2),2,0)
这是说:计算描述中有多少行。使用从 A5 开始的 OFFSET 构建一个数组,其中的行数与描述中的行数相同,并且有 2 列。 (因此描述中有 3 个项目,这将是 A5:B7)。然后在 VLOOKUP 中使用该新范围,并尝试在 A 列的描述区域中找到 A1,并在 B 列中找到该行的结果 return。
您可以使用 Offset
将命名范围扩展一列,然后将其输入 Vlookup
类似于:
=VLOOKUP(C1,OFFSET(RANGE,0,0,,1+COLUMNS(RANGE)),1+COLUMNS(RANGE))
为了测试,我在 A 列中创建了一个命名范围(称为 "RANGE"),我将值放在 B 列中与命名范围相邻的位置,在 C1 中放置一个查找值,然后输入上面的公式.它成功检索到所需的值。
关于编辑:我认为 Grade'Eh'Bacon 的回答非常好,可能是解决这个特定问题的最佳方法,但我觉得知道如何在不更改的情况下扩展命名范围的引用可能很有用名字本身,所以我保留这个答案。
我需要找到一种方法来搜索命名范围内的值并 return 该范围旁边的列。原因很简单:我确实在 A 列中使用命名范围的列表验证。在此列表中有产品类型的完整名称(例如继电器、接触器、外壳),我需要 return 来自的简短描述B 列(例如 Rly、Cont、Encl),这样当用户搜索列表时,很容易找到他要找的东西。我知道我可以将我的范围扩展到 $A:$B 但如果我这样做,那么 $B 的所有值都将包含在列表中...
这显示了一种找出我需要什么的方法:=VLOOKUP(A1;"RANGE+1C",2,0) 我尝试了很多使用偏移量和索引的方法,但找不到这样做的方法......我什至认为可以使用相对参考(例如 =VLOOKUP(A1,Description;1"RC[1]",0) 或类似的东西... 还查看了 Google 以查找一些信息,但它似乎非常陌生...
我需要在公式中而不是在 VBA 中执行此操作。
这里是 link 示例文件: http://www.filedropper.com/descriptionbuilder
有什么提示吗?
谢谢!
您可能需要 MATCH & INDEX 组合而不是 VLOOKUP。
MATCH 是一个函数,它告诉您从所选列表中找到重复值的行号 - 它就像 VLOOKUP 的一半。 INDEX 是一个函数,它根据您给它的位置 # 从列表中提取一个值 - 它就像 VLOOKUP 的另一半。
我看到您在 A 列中的一个范围与您的 ID 数据是描述 - 我假设 B 列没有 'named' 与您的范围一致的范围。我假设 B 列有其他数据,并且 A 列从第一行之后的某处开始 [具体来说,我假设它从第 5 行开始]。公式看起来像这样:
=INDEX(B:B,ROW(A5)-1+MATCH(A1,Description,0))
这表示:在描述中找到与 A1 中的文本匹配的行#。然后添加 A5 - 1 的行号(然后将 Description 的顶部与 B 列的顶部对齐)。然后从 B 列中提取该值。
使用 VLOOKUP 和 OFFSET 的替代方法
另一种方法是首先定义 Description 中有多少行,然后使用该信息和 OFFSET 函数创建一个新区域,该区域本质上代表 Description 但跨越 A 列和 B 列,而不仅仅是 A 列。这看起来如下(同样,假设描述从 A5 开始):
=VLOOKUP(A1,OFFSET(A5,0,0,ROWS(Description),2),2,0)
这是说:计算描述中有多少行。使用从 A5 开始的 OFFSET 构建一个数组,其中的行数与描述中的行数相同,并且有 2 列。 (因此描述中有 3 个项目,这将是 A5:B7)。然后在 VLOOKUP 中使用该新范围,并尝试在 A 列的描述区域中找到 A1,并在 B 列中找到该行的结果 return。
您可以使用 Offset
将命名范围扩展一列,然后将其输入 Vlookup
类似于:
=VLOOKUP(C1,OFFSET(RANGE,0,0,,1+COLUMNS(RANGE)),1+COLUMNS(RANGE))
为了测试,我在 A 列中创建了一个命名范围(称为 "RANGE"),我将值放在 B 列中与命名范围相邻的位置,在 C1 中放置一个查找值,然后输入上面的公式.它成功检索到所需的值。
关于编辑:我认为 Grade'Eh'Bacon 的回答非常好,可能是解决这个特定问题的最佳方法,但我觉得知道如何在不更改的情况下扩展命名范围的引用可能很有用名字本身,所以我保留这个答案。