免辅助列的利器:mmult和多维引用
1.求每一行的和
现在来增加一点难度,我们需要将得到的这些和放在一个内存数组中,方便后续的运算,这样可以免去辅助列。如果这样说你不理解,下面举个例子。
我们希望不用辅助列,一步得到结果。这时就需要用到免辅助列的方法,常用的免辅助列方法有mmult和多维引用,当然还有其他函数的数组用法也可以免辅助列。今天主要分享多维引用和mmult。
OFFSET(A1:D1,ROW(1:6),)这部分从A1:D1开始,分别向下偏移1,2,3,4,5,6行,得到由A2:D2、A3:D3、···、A7:D7共6行组成的多维引用,注意这6行是相对独立的,它们在不同的平面上。
SUBTOTAL(9,OFFSET(A1:D1,ROW(1:6),))这部分用subtotal对多维引用的每一行分别求和,得到6个值,存放在内存数组中。想要把这6个值输出到单元格中,相应地也要选中6个单元格,且方向也要一样。然后输入公式,按ctrl+shift+enter。如下图F2:F7所示。
得到了这个内存数组,后续求最大值,还是求平均值就简单了。这样就免去了辅助列。
mmult的用法不再重复说明,可以回顾之前的文章《初识矩阵乘积函数mmult的原理和基本用法》。
计算A11:D16这个区域中每一行的最大值,直接在E11单元格输入公式=MAX(A11:D11),向下填充。这个不会的打屁屁。
用多维引用来生成内存数组,选中F11:F16,在编辑栏输入下图的公式,按ctrl+shift+enter输出结果。和第1题的公式基本一样,只有subtotal的第1参数变为4。
这个方法之前说过一次,今天再来简单说一下。下图的公式得到灰色区域的结果,也就是第①步的结果。简单来说,就是给A11:D16这个区域的第1行加100,第2行加200,···,第6行加600。
第②步的结果,是从第①步的结果中取出第4,8,12,16,20,24个最小值得到的,公式为=SMALL(ROW(1:6)/1%+A11:D16,ROW(1:6)*4)。可以看到K列的每个结果刚好是灰色区域每一行的最大值,这部分你可以好好琢磨一下。
最后把K列的结果除以100取余数就得到了我们想要的结果。
https://pan.baidu.com/s/1gK4fGQdF00_7TsnKwxOQnA