避免重复的OFFSET计算

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

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

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

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

有没有办法可以转身

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

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

或者是等价的,这样我可以在一个地方改变引用的定义,并将其应用到行中的所有函数中?

读你的例子,对我来说,这是一个使用命名公式的最佳时机。 CTRL-F3打开名称向导,创build一个名称,如MyRange ,在REFERSTO:部分,input您在A1中放置的OFFSET()公式。 一定要使其成为一个绝对的参考公式。

那么你应该能够总结你创build的结果范围

A1: = SUM(MyRange)

B1: = MAX(MyRange)

您可以使用Addressfunctionbuild立您的范围地址,然后使用Indirect引用该范围。 例如,在A1中假设input: =ADDRESS(5,2,1,1)&":"&ADDRESS(5,3,1,1) 。 那会给你一个$ B $ 5:$ C $ 5的地址。 现在,您可以使用公式如=SUM(INDIRECT(A1))来获取该范围内的值的总和。

你没有提供足够的细节,所以我不知道你使用Offset是否适合这个scheme。 如果你可以计算开始和结束的行和列,那么你可以用AddressIndirectreplaceOffset 。 你可能可以用某种方式来工作,但是我没有足够的信息来帮助解决这个问题。

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

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