excel 是否有一种方法可以使用索引值对2D矩阵中的特定范围进行平均?

zdwk9cvp  于 2023-01-06  发布在  其他
关注(0)|答案(1)|浏览(94)

我有几个5列乘30行的矩阵,其中的数据是从左到右逐行连续的。
订购示例

我希望能够根据指数对该数据的特定范围求平均值。例如,我希望得到以下各项的平均值:

  • 前6个值(黄色)
  • 接下来的3个值(绿色)
  • 接下来的2个值(蓝色)
  • 接下来的4个值(橙子)

在我看来,实现这一点的一种方法是将数组扁平化为2D向量,然后使用类似=average(offset(reference,X,0,Y,1))的函数,其中:

  • X是向量中要跳过的行数
  • Y是要求平均值的行大小

是否有某种方法可以使用offset或其他Excel函数将矩阵视为2D向量,并根据要求前X个值、然后是下一个Y、下一个Z等值的索引提取平均值?

dgsult0t

dgsult0t1#

使用Office 2016,我们需要从2D数组创建一个1D数组。我们可以使用INDEX,使用MOD和INT,根据开始和结束的输入获得正确的值。

=AVERAGE(
    INDEX(A1:E3,
        N(IF({1},INT((ROW(INDEX($ZZ:$ZZ,H1):INDEX($ZZ:$ZZ,H2))-1)/5)+1)),
        N(IF({1},MOD(ROW(INDEX($ZZ:$ZZ,H1):INDEX($ZZ:$ZZ,H2))-1,5)+1))))

H1保存开始索引,H2保存结束索引。确保用数据集的范围替换A1:E3。使用ZZ是任意的,因为我们只关心返回的行号。我使用它是因为它通常是空的,如果数据改变,不会导致不必要的计算。
对于旧版本,退出编辑模式时可能需要使用Ctrl-Shift-Enter而不是Enter。

对于使用Office 365或更高版本的用户,我们可以使用TOCOL和SEQUENCE:

=LET(
    rng,A1:E3,
    st,H1,
    end,H2,
    AVERAGE(INDEX(TOCOL(rng),SEQUENCE(end-st+1,,st))))

相关问题