Excel中如何使用INDIRECT函数

问题描述

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

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

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

1-

=INDEX(INDIRECT(A1&"!$1:$1048576"),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&"!$1:$1048576,MATCH("&CHAR(34)&B1&CHAR(34)&",2)")

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

两种方法都会给出错误 #Ref!。但我真的看不出哪里出了问题。

我真的很感激任何信息让我理解我的错误以及改进这些公式的任何建议。

提前致谢!

解决方法


原因

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

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

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

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

在您尝试“2-”时,您尝试将更多公式放入 INDIRECT 函数中,但它应该更少


答案

例如,您可以尝试:

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

更好

困难的部分原因是将工作表名称放在一个范围内,而范围引用硬编码在公式中。

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

  2. 还要考虑将单元格命名为 A1、A2、B1 和 B2,并在查找公式中引用命名区域。这样,如果您以某种方式移动这些单元格,就不太可能破坏您的查找公式。


进一步的想法

我认为您正在考虑使用 INDIRECT 等易变函数的性能权衡。如果没有,请搜索愉快!