如何在 Excel 中使用 INDIRECT 函数

How to use the INDIRECT function in Excel

我在 Excel 中使用以下公式来获取单元格的值:

=INDEX(Sheet1!:48576,MATCH("Component 1",Sheet1!$A:$A,0)+MATCH("Component 2",Sheet2!$B:$B,0),2)

对于新应用程序,sheet 和组件名称是动态的,这意味着它们可以更改,不一定是“Sheet1”、“Sheet2”、“Component 1”和“Component 2” .因此,我尝试使用内置的 INDIRECT 函数来扭曲上述公式。我尝试了两种不同的方法来让它工作:

1-

=INDEX(INDIRECT(A1&"!:48576"),INDIRECT("MATCH("&CHAR(34)&B1&CHAR(34)&","&A1&"!$A:$A,0)+MATCH("&CHAR(34)&B2&CHAR(34)&","&A2&"!$B:$B,0)"),2)

2-

=INDIRECT("INDEX("&A1&"!:48576,MATCH("&CHAR(34)&B1&CHAR(34)&","&A1&"!$A:$A,0)+MATCH("&CHAR(34)&B2&CHAR(34)&","&A2&"!$B:$B,0),2)")

其中单元格 A1 和 A2 的值是 sheet 的名称,单元格 B1 和 B2 接收组件的名称。

两种方法都会出错 #Ref!。但是实在是看不出来哪里不对。

我非常感谢任何能帮助我理解我的错误的信息以及任何改进这些公式的建议。

提前致谢!


原因

您正在使用 INDIRECT 编译部分公式,包括函数名称(例如“1-”中的“MATCH”)。

相反,仅使用 INDIRECT 在公式中的这些函数内构建对范围或单元格(包括限定符,例如工作 sheet、工作簿等)的实际引用。将公式的其余部分留在 INDIRECT 函数之外。

因此,在您的“1-”中,将“MATCH”移回“INDIRECT”函数之外。

要使“组件 1”可变,只需以正常方式引用包含该字符串的单元格。

在您尝试“2-”时,您尝试将公式的 more 放入 INDIRECT 函数中,但它应该是 less.


回答

例如,您可以尝试:

=INDEX(INDIRECT($A&"!:48576"),MATCH($B,INDIRECT($A&"!$A:$A"),0)+MATCH($B,INDIRECT($A&"!$B:$B"),0),2)

更好

出现困难的部分原因是将 sheet 名称放在一个范围内,并且在公式中硬编码了范围引用。

  1. 您可以考虑将“Sheet1!$1:$1048576”放入 A1(例如),而不仅仅是“Sheet1”,并相应地调整公式。这样,如果范围发生变化或增长,您只需编辑 A1、B1、B2,而不是编辑公式。请注意,您将无法将 A1 重复用于对“Sheet1!$A:$A”的引用,您需要一个不同的单元格来存储该引用。

  2. 同时考虑命名单元格 A1、A2、B1 和 B2,并在查找公式中引用命名范围。这样,如果您以某种方式移动这些单元格,就不太容易破坏您的查找公式。


进一步思考

我想您已经了解了使用 INDIRECT 等可变函数的性能权衡。如果没有,祝您搜索愉快!