我目前正在完成一个非常基本的数据分析单元,其中包含一个小的Excel细分市场,我之前的任务涉及分析一些住房数据。
一项任务涉及对每个时期的几个城市的住宅价格进行平均和舍入。
目标数据位于工作表Residential_Houses
中,格式设置为城市为列,时间段为跨越C7:J30
的行。目标是让工作表Analysis
中每行的平均值跨越C7:C30
。
我的简单解决方案是编写公式:
=ROUND(AVERAGE(Residential_Houses!C7:J7), 2)
进入Analysis!C7
,然后使用Excel的“自动填充”功能生成Analysis!C8:C30
的公式。这工作正常,结果是正确的,但我没有明确使用单元格数组公式丢失标记。
相反,我给出的样本答案是这条单片线:
{=ROUND((Residential_Property!C7:C30+Residential_Property!D7:D30+Residential_Property!E7:E30+Residential_Property!F7:F30+Residential_Property!G7:G30+Residential_Property!H7:H30+Residential_Property!I7:I30+Residential_Property!J7:J30)/8,2)}
似乎很清楚,此代码的目的是为每行7-30采用C-J列的平均值,但它避免使用内置的AVERAGE()。这有效,但它很麻烦,如果此测试数据中有多列,则无法扩展。
我的问题的关键在于你如何将功能与已经在范围上运行,单元格数组公式来处理多个范围用一个公式?
我的直觉告诉我它可能是这样的:
{=AVERAGE((C7:J7):(C30:J30))}
或涉及间接寻址的事情,但我似乎无法找到有关该主题的任何详细信息。到目前为止,我发现的所有数组公式资源都限于基本算术和单维范围。有人能指出我在正确的方向,或者这是不可能的数组公式?
编辑:对于将来偶然发现此事的任何人。我选择了Barry的解决方案,因为它帮助我理解了如何概括这个概念(用一个可以切割范围的函数替换范围)。但正如Scott所说,OFFSET()是不稳定的;因此,如果您正在使用大型数据集,则INDEX()是一种更好的方法。
答案 0 :(得分:3)
这是一个可以作为一个数组公式输入并获得结果的公式。它也可以正常输入并复制下来。
=ROUND(AVERAGE(INDEX($C$7:$J$30,ROW()-MIN(ROW($C$7:$J$30))+1,0)),2)
答案 1 :(得分:3)
与Scott的建议类似,SUBTOTAL
可以处理由OFFSET
函数创建的范围数组,因此SUBTOTAL
的第一个参数为1(对于{{ 1}})此公式将为每行提供一个舍入平均值数组
AVERAGE
以垂直范围输入,并以 CTRL + SHIFT + ENTER
确认或者您可以在=ROUND(SUBTOTAL(1,OFFSET(C7:J30,ROW(C7:J30)-ROW(C7),0,1)),2)
函数中使用相同的OFFSET
,如下所示:
AVERAGE