网站首页 > 教程分享 正文
各位朋友,你们好。今天和你们分享一个高级函数。
先看一个题目:需要计算区域中最后一个非空单元格的和(黄色填充单元格的和)。
一、常规的方法
用【Lookup】函数分别提取所有列的最后一个非空单元格数据,然后再求和,如下图:
=LOOKUP(9E+307,C2:C9)
然后我们可以用4个LOOKUP函数得到结果:
=LOOKUP(E9+307,B2:B9)+LOOKUP(9E+307,C2:C9)+LOOKUP(9E+307,D2:D9)+LOOKUP(9E+307,E2:E9)
现在这里只有四列,但是,如果有很多很多列呢?这个简单方法写出的公式是不是就很长很长呢?所以,我们需要更高级的方法。
二、高级方法
1、解题思路
使用Offset函数,参照A1单元格,分别偏移{5,6,7,8}行、偏移{1,2,3,4}列,可得到每列最后一个非空单元格的值,然后用SUM函数直接求和(这里需要在OFFSET函数外面嵌套一个N函数,才能进行求和)。于是得到一个公式:=SUM(N(OFFSET(A1,{5,6,7,8},{1,2,3,4})))
2、构建数组
由于数据内容是不断变化的,需要根据题中的数据,构建出{5,6,7,8}、{1,2,3,4}这两个数组。结果如下(后面有公式的详细解释):
{5,6,7,8}=LEFT(MMULT(TRANSPOSE(IF(B2:E9<>"",ROW(1:8),)),10^(ROW(1:8))))
{1,2,3,4}=ROW(1:4)
然后将这两组公式代入上面的求和公式中,得到本题的高级解法公式(见下图):
=SUM(N(OFFSET(A1,LEFT(MMULT(TRANSPOSE(IF(B2:E9<>"",ROW(1:8),)),10^(ROW(1:8)))),ROW(1:4))))
三、MMULT函数
这里用到了一个高级函数:MMULT,它就是今天的主角;
在数组公式中,非常重要的一个高级函数;
下面遇到看不懂的内容,可以先跳过,先浏览一遍再回头看。
1、函数说明
这是一个非常烧脑的函数,今天做一个基础讲解,我们先看看官方提供的函数帮助:
关于行数、列数的描述,是不是有点晕了呢?先别晕,要记住下面这两个重点:
1、结果矩阵的行数与 array1 的行数相同,矩阵的列数与 array2 的列数相同;
2、Array1 的列数必须与 array2 的行数相同,而且两个数组中都只能包含数值。
2、函数作用
说实话,是不是有一种感觉:即使看了说明和帮助,还是不知道这个函数能做什么?
接下来,我用大家能听得懂的文字来说下,这个函数的作用:
①数组降维:将二维数组转变为一维数组(上面的题目用到的就是这个);
②数组升维:将一维数组转变为二维数组。
有没有联想到《三体》中的二向箔呢?
3、数组类型
三种数组类型:一维横向数组、一维纵向数组、二维数组。(见下图)
4、应用案例:数组降维
结果数组行数:9行 = Array1行数:9行
结果数组列数:1列 = Array2列数:1列
Array1列数:3列 = Array2行数:3行
结果数组第一行的数据=1×1+9×2+4*3=31(即Array1的第n列 × Array2的第n行的和)
5、应用案例:数组升维
结果数组行数:3行 = Array1行数:3行
结果数组列数:2列 = Array2列数:2列
Array1列数:1列 = Array2行数:1行
结果数组第一个的数据=1×3=3(即Array1的第n行 × Array2的第m列)
四、本题中公式解释
{5,6,7,8}=LEFT(MMULT(TRANSPOSE(IF(B2:E9<>"",ROW(1:8),)),10^(ROW(1:8))))
1、【标记有数据的行】IF(B2:E9<>"",ROW(1:8),)
2、数组转置TRANSPOSE
这里为什么要转置呢?
我需要把每列中标记的行数组合起来,比如张三要得到543210、李四要得到6503010、王五要得到70500200、赵六要得到800500010。
然后再把每个数据的左边第一个数值提取出来,就可以得到{5,6,7,8}这个数组。
所以要利用MMULT的数组降维对列数据求和,故需要将求和的列转换成行。
3、【数组降维】MMULT
这里用【10^(ROW(1:8))】生成了一个1列8行的一维纵向数组。
4、【提取结果】LEFT
到此,成功将区域中最后一个非空单元格的行位置提取了出来。
好了,这就是今天的分享内容。
今天的这个函数有点难,希望你们收藏文章,多练习下这个函数。
如果你喜欢我分享的文章,请记得关注我,以便第一时间收到文章推送。
猜你喜欢
- 2025-05-03 根据月份自动求和,这个最简单的Excel函数99%用户想不到!
- 2025-05-03 ChatGPT与Excel如何联动,1秒生成报表!实操如下
- 2025-05-03 Excel 进阶宝典:10 个鲜为人知的技巧,让表格处理效率飙升
- 2025-05-03 Excel常用技能分享与探讨(5-宏与VBA简介 VBA之图表自动化)
- 2025-05-03 C#学习随笔—自定义控件(面板)(c#自定义控件按钮)
- 2025-05-03 文本运算符“&”和文本连接函数 CONCAT 到底有啥神奇的用处
- 2025-05-03 vba引用单元格方式(vba如何引用excel函数)
- 2025-05-03 Fabric.js 拖放元素进画布 - 掘金
- 2025-05-03 从零开发HarmonyOS(鸿蒙)运动手表小游戏—数字华容道
- 2025-05-03 一文读懂播放内核解码音视频编码数据并播放的实现原理
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- css导航条 (66)
- sqlinsert (63)
- js提交表单 (60)
- param (62)
- parentelement (65)
- jquery分享 (62)
- check约束 (64)
- curl_init (68)
- sql if语句 (69)
- import (66)
- chmod文件夹 (71)
- clearinterval (71)
- pythonrange (62)
- 数组长度 (61)
- javafx (59)
- 全局消息钩子 (64)
- sort排序 (62)
- jdbc (69)
- php网页源码 (59)
- assert h (69)
- httpclientjar (60)
- postgresql conf (59)
- winform开发 (59)
- mysql数字类型 (71)
- drawimage (61)
本文暂时没有评论,来添加一个吧(●'◡'●)