Excel网格查找

时间:2012-08-01 19:34:52

标签: excel excel-formula

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

    Names    Age   Shoe Size
    Andrew   19    12
    Mary     17     8
    Sarah    15    10
    Wesley   19    11

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

我已阅读有关Double Lookup的this有用指南,但有一件事仍困扰着我。

这是公式:

=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!错误。

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

=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)

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

我该如何解决这个问题?

提前致谢:)

2 个答案:

答案 0 :(得分: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是一个易失性函数,只要在任何地方发生变化,它就会重新计算。工作簿效率较低。

答案 1 :(得分:2)

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

您可以尝试使用索引函数,因为它类似于偏移函数。