4

我在一个文件中有一个数组,例如:

    名称 年龄 鞋码
    安德鲁 19 12
    玛丽 17 8
    莎拉 15 10
    卫斯理 19 11

我想根据给定的名称和数据类型精确定位一条数据。例如,精确定位SarahAge,我希望单元格读取15

我已经阅读了这份关于双重查找的有用指南,但有一件事仍然困扰着我。

这是公式:

=OFFSET(A1:C5,MATCH("Sarah",OFFSET(A1:C5,0,0,ROWS(A1:C5),1),0)-1,MATCH("Age",OFFSET(A1:C5,0,0,1,COLUMNS(A1:C5)),0)-1)

当数据在同一个文件中时它可以工作,但是当我尝试使用另一个文件中的给定公式时,它会#VALUE!出错。

从另一个文件读取的代码(我所做的只是添加文件路径):

=OFFSET(C:file\path\'[Lister.xls]Shhet1'!$A$1:$C$5,MATCH("Sarah",OFFSET(C:file\path\'[Lister.xls]Shhet1'!$A$1:$C$5,0,0,ROWS(C:file\path\'[Lister.xls]Shhet1'!$A$1:$C$5),1),0)-1,MATCH("Age",OFFSET(C:file\path\'[Lister.xls]Shhet1'!$A$1:$C$5,0,0,1,COLUMNS(C:file\path\'[Lister.xls]Shhet1'!$A$1:$C$5)),0)-1)

这里是隔开的,所以更容易阅读:

=OFFSET(C:file\path\'[Lister.xls]Shhet1'!$A$1:$C$5,
MATCH("Sarah", OFFSET(C:file\path\'[Lister.xls]Shhet1'!$A$1:$C$5, 0, 0,
ROWS(C:file\path\'[Lister.xls]Shhet1'!$A$1:$C$5),1), 0)-1,
MATCH("Age", OFFSET(C:file\path\'[Lister.xls]Shhet1'!$A$1:$C$5, 0, 0, 1, 
COLUMNS(C:file\path\'[Lister.xls]Shhet1'!$A$1:$C$5)), 0)-1)

有谁知道为什么它不喜欢其他文件?这是相同的信息。

我该如何解决?

提前致谢 :)

4

2 回答 2

4

只是为了扩展 Scott 的答案,关闭工作簿的外部路径被视为数组而不是引用,因此如果工作簿关闭,则期望在 OFFSET、SUMIF 或 COUNTIF 等参数中引用的函数会返回错误。

另一方面,INDEX 确实允许数组作为参数,因此您可以尝试输入:

=INDEX(A1:C5,MATCH("Sarah",INDEX(A1:C5,0,1),0),MATCH("Age",INDEX(A1:C5,1,0),0))

这也应该允许引用已关闭的工作簿。

INDEX 的另一个优点是它不是易失性的,因此只会在从属单元格 (A1:C5) 中的一个单元格发生更改时重新计算,而 OFFSET 是一个易失性函数,并且只要在工作簿中的任何位置进行更改就会重新计算效率较低。

于 2012-08-02T09:20:17.510 回答
2

某些功能要求目标工作簿可以工作 - 偏移量就是其中之一。间接和 Sumif 和 Countif 是其他的。您必须打开目标,或重新设计流程。

您可以尝试使用 index 函数,因为它类似于 offset 函数。

于 2012-08-01T20:47:49.397 回答