避免重复的OFFSET计算

时间:2012-02-27 19:59:22

标签: excel excel-formula

如何在多个单元格中使用单个OFFSET()的结果?

我有一个包含很多行的工作表。对于每一行,都有一组我感兴趣的连续列。我感兴趣的列的范围取决于其他地方设置的一些单元格;我可以使用OFFSET()函数来定义范围。

对于每一行,我需要在同一个数组引用上调用几个数组函数(SUM,AVERAGE等)。

这可以通过在每种情况下调用OFFSET来完成... SUM(OFFSET(args)),AVERAGE(OFFSET(args));但我发现错误,因为我试图让所有OFFSET调用与数组的最新定义保持同步。

有没有办法可以转

B1: =SUM(OFFSET(args))
C1: =MAX(OFFSET(args))

A1: =OFFSET(args)
B1: =SUM(A1)
C1: =MAX(A1)

或等价物,以便我可以在一个地方更改引用的定义并将其应用于行中的所有函数?

3 个答案:

答案 0 :(得分:4)

阅读你的例子,我觉得这是一个使用命名公式的最佳时机。 CTRL-F3打开名称向导,创建一个名称,如 MyRange ,并在REFERSTO:部分输入你的 OFFSET()公式投入A1。一定要把它作为绝对引用的公式。

然后您应该能够使用

对您创建的结果范围求和

A1: = SUM(MyRange)

B1: = MAX(MyRange)

答案 1 :(得分:0)

您可以使用Address功能构建范围地址,然后使用Indirect来引用该范围。例如,在A1中,您输入:=ADDRESS(5,2,1,1)&":"&ADDRESS(5,3,1,1)。这将给你一个$ B $ 5:$ C $ 5的地址。现在,您可以使用=SUM(INDIRECT(A1))之类的公式来获取该范围内值的总和。

您没有提供足够的详细信息,因此我不知道您对Offset的使用是否适合此方案。如果您可以计算开始和结束的行和列,那么您可以将Offset替换为AddressIndirect。你可能会以某种方式工作,但我没有足够的信息来帮助解决这个问题。

答案 2 :(得分:0)

您可以使用OFFSET数组输入的公式为每一行生成正确的列集,从源表右侧的一致列开始(或在必要时在另一个表上)并向右工作。然后,您可以在单元格B1,C1等中的所有其他公式中使用相同的范围。

如果您有时需要选择不同数量的列,则需要添加一些错误处理,以防止可能的#N / A错误污染您的计算。这可以通过IF与ISERROR或ERROR.TYPE结合来完成。