bsh*_*52s 5 named-ranges vlookup microsoft-excel
我的 Excel 工作表在我定义的命名范围内包含许多 VLOOKUP。现在,当我在命名范围的中间添加一列时,在插入的列之后引用列的 VLOOKUP 现在已损坏。我明白这个问题,但最好的解决方法是什么?有没有办法从标题文本中找出列号?
[编辑] 使用 Kaze 的 INDEX 和 MATCH 想法似乎是最好的解决方案。这是我的结果:
INDEX(MyTableData, MATCH("RowLabel", RowList, 0), MATCH("ColumnLabel", ColumnList,0))
Run Code Online (Sandbox Code Playgroud)
其中 MyTableData 是整个表的命名范围,RowList 是行标题的命名范围,ColumnList 是列标题的命名范围。
就个人而言,我更喜欢使用INDEX-MATCH组合而不是VLOOKUP. 这是我为侄女编译的 Pokedex 的一个例子。

要获得 Squirtle 的隐藏能力,我会使用以下公式:
=INDEX(F2:F11,MATCH("Squirtle", A2:A11,0),1)
Run Code Online (Sandbox Code Playgroud)
这产生与以下相同的结果:
=INDEX(A1:G11,MATCH("Squirtle",A1:A11,0),MATCH("Hidden Ability",A1:G1,0))
Run Code Online (Sandbox Code Playgroud)
INDEX-MATCH 的一个好处是,在大多数情况下,您不需要引用整个数据范围,因此即使您定期向数据范围添加列和行,第一个公式也应该有效。它还具有另一个优点:由于您仅引用 2 个一维范围,因此计算速度更快。
尽管如此,你仍然可以使用MATCH你VLOOKUP的公式来获取列数。
=VLOOKUP(C1,NAMED_RANGE,MATCH("COLUMN_TEXT",$A$1:$H1,0),0)
Run Code Online (Sandbox Code Playgroud)
其中:
$A$1:$H$1是数据/命名范围中的第一行,或包含标题文本的行
NAMED_RANGE是数据范围的名称
"COLUMN_TEXT"是包含所需数据的列的标题文本
C1包含查找值
编辑:根据 Doug 的要求添加了索引匹配示例。:D