结合 LOOKUP 和 OFFSET

Combining LOOKUP and OFFSET

我想将我数据中的最后一个条目偏移一周。例如,我刚刚创建了这个示例数据:

day value
1   4
2   3
3   5
4   6
5   1
6   3
7   9
8   5

要查找数据集中的最后一个条目,我使用查找函数:

 =LOOKUP(9.99E+307,b1:b10)

这将 return 值 5。 (如果不熟悉符号,9.99E+307 是 Excel 中可以写的最大数字)。

然后我想将该值与上周的值进行比较,从而将最后一个条目偏移 7。我看到 OFFSET 要求:offset(reference,rows,cols) 但使用:

=OFFSET(LOOKUP(9.99E+307,b1:b10),-7,0)

似乎不​​起作用(它 return 是一个错误)。

可能是什么问题?

ReferenceOFFSET函数引用了一个Range对象(一个单元格)。 Lookup 函数的结果是一个数值,在本例中为 5。您不能 OFFSET 一个数值。

您是否考虑过使用 VBA?

@user3561813 已经解释了原因,解决方案可能是:

=INDEX(B:B,MATCH(1E+100,B:B)-7)  

MATCH finds the position (row number) of last entry in ColumnB, -7 steps up seven rows and INDEX 在 ColumnB 中查找该行的内容。

为什么不更改查找以查找列表中的最后一天?

此公式将 return 最后一天的值(上面数据中的 8):

=LOOKUP(9.99E+307,A1:A10)

然后您可以使用此公式 return 当天的最后一个值(上面数据中的 5):

=VLOOKUP(LOOKUP(9.99E+307,A1:A10),A1:B10,2,FALSE)

如果您想获得 7 天前的值,只需像这样从 LOOKUP 公式的结果中减去 7(将 return 4 - 上面数据中的第 1 天值):

=VLOOKUP(LOOKUP(9.99E+307,A1:A10)-7,A1:B10,2,FALSE)

您也可以使用单个 LOOKUP 函数,将 "return vector" 偏移 7 行,例如

=LOOKUP(9.99E+307,B8:B100,B1:B93)