分享

Excel数据分析——函数与公式(下)

 whoyzz 2023-07-19 发布于湖北

本文共计约3000字,建议阅读时间3分钟

目录

  • 函数学习必备知识
    • 单元格引用
    • 函数小贴士
  • 基础函数
    • 文本转化
    • 日期和时间处理
    • 数值计算
  • 进阶函数
    • 查找与引用
      • XLOOKUP,比VLOOKUP更强
      • 较为复杂的引用函数
    • 计数和求和
      • SUBTOTAL与SUM的区别
      • 条件求和
      • 加权求和、加权平均
    • 排序
      • 常见应用场景
    • 统计
  • 高级函数
    • 数组函数
    • VBA自定义函数
    • 其他场景下的函数应用
    • 关于函数使用的建议

本篇开始讲Excel函数与公式的下篇——高级函数。

基础函数请移步Excel数据分析——函数与公式(上)

进阶函数请移步Excel数据分析——函数与公式(中)。

三、高级函数

1、数组函数

“数组”这个概念在编程语言中并不陌生,但在Excel中可能很多人以为自己没接触过,但其实随手可见。

如下动图所示,引用的区域B3:C5其实就是一个数组,在编辑栏按F9,得到B3:C5对应的3行2列的常量数组{1,2;3,4;5,6}。从这里我们可以知道,数组是一对花括号{}把所有元素包含起来,用逗号代表列与列的间隔,分号代表行与行的间隔。

Excel数据分析——函数与公式(下)

▴ Excel数组、溢出概念

单单元格数组公式和多单元格数组公式

如果数组只存在于计算过程的内存中,最终输出结果只有一个单元格,那么这就是单单元格数值公式,典型的如SUM函数。

如果返回结果是数组,输出结果是存在多个单元格中,这就是多单元格公式了,典型的如TRANSPOSE函数。由于多单元格数组公式是一次计算产出多单元格结果,比起多单元格的多次重复计算,计算效率是高很多的。

在Excel 2019版本之前的数值公式,需要编辑完成后按下CSE(Ctrl+Shift+Enter)才是正确的(这时公式前后会多出来一对花括号),但现在可以跟普通函数一样,只按Enter即可。因为Excel特别的溢出设计。有了这个就不需要先计算好有结果是几乘几的数组,再选好同等大小区域来应用数组公式了。

没有花括号的单单元格数组公式,看起来跟普通公式毫无二致。比如上文提到的求最高三项平均值,公式是=AVERAGEA(LARGE(E3:E12,ROW(1:3))),就是先利用ROW(1:3)产生一个{1,2,3}的常量数组,作为LARGE函数的第2个参数,取出区域中的TOP1、TOP2和TOP3,再对这三个值求平均。再比如查找与应用函数中的第一个例子,单列查找结果多列,公式=XLOOKUP($G5,B$2:B$26,C2:D26),输出的是1行*2列,也用到了溢出,不用考虑旁边各自的公式要怎么写了。

多单元格数组公式具有同一性,因为数组本来就是按相对位置计算的,所以绝对和相对引用的区分就没那么重要了。只需要在左上角编辑一个公式,Excel就会自动溢出到周边单元格,整个数组公式区域用一个发光的边框框起来。事实上只有数组的左上角单元格可编辑,其他单元格的编辑栏置灰不可编辑。

那么本小节的数组公式,就着重讲多单元格数组公式的应用了。

  • FILTER:可以基于定义的条件筛选一系列数据。
  • SORT:对区域或数组的内容进行排序
  • SORTBY:根据相应区域或数组中的值对区域或数组的内容进行排序
  • UNIQUE:返回列表或区域的唯一值列表
  • TRANSPOSE:返回数组的转置
  • ARRAYTOTEXT:返回任意指定区域内的文本值的数组。
  • RANDARRAY:返回 0 和 1 之间的随机数字数组。但是,你可以指定要填充的行数和列数、最小值和最大值,以及是否返回整个数字或小数值。

数组公式应用示例

方框为数组公式区域,浅绿色单元格为数组公式可编辑单元格

Excel数据分析——函数与公式(下)

▴ 数组公式应用示例

2、VBA自定义函数

若你需要经常做某种计算,而用Excel自带公式实现,步骤很多容易出错,建议你把计算逻辑固化为自定义函数。

我曾经编辑过一个函数,实现功能是:将一个指标值映射到Ymin-Ymax之间,也就是指数化。具体功能是,指标值大于Xmax时,Y取Ymax,指标值小于Xmin时,Y取Ymin,指标值在Xmin-Xmax之间时,Y在Ymin-Ymax之间线性分布。

'自定义函数VBA代码brFunction zs_score(low As Double, high As Double, weight As Double, value As Double, up As Boolean)br flag = 1br If up = False Thenbr flag = -1br End Ifbrbrbr If value * flag >= high * flag Thenbr zs_score = weightbr ElseIf value * flag <= low * flag Thenbr zs_score = 0br Elsebr zs_score = weight * (value - low) / (high - low)br ' MsgBox 'hi'br End IfbrEnd Function

自定义函数唯一不方便的就是改格式。我的解法是:把包含函数的Excel发布为xlam加载项,每次启动Excel时自动加载函数,这样函数就在任何地方都可用了。不过,如果Excel发给了别人,别人的Excel没装加载项的话是无法识别自定义函数的。要么把加载项一起发给对方,要么把公式结果转成值(如果公式本身不重要结果值更重要的话)。

3、其他场景下的函数应用

条件格式+函数公式实现甘特图效果

从“Excel文件”|“新建”,在输入框内搜索“甘特”,可以找到如下图所示的甘特图模板。这个甘特图就是通过条件格式+函数公式实现的。

Excel数据分析——函数与公式(下)

▴ Excel甘特图(条件格式+函数实现)

从“开始”|“样式”|“条件格式”|“管理规则”,可以看到条件格式的具体规则。

Excel数据分析——函数与公式(下)

▴ 查看条件格式的具体规则

点击“编辑规则”,可以看到,条件格式规则的规则类型是“使用公式”

Excel数据分析——函数与公式(下)

▴ 编辑条件格式规则

Excel数据分析——函数与公式(下)

▴ 使用公式编辑条件格式规则

公式具体如下:

已完成(灰色底纹)条件规则公式为:

=AND(task_start<=I$5,ROUNDDOWN((task_end-task_start+1) *task_progress,0)+task_start-1>=I$5)

计划完成(紫色底纹)条件规则公式为:

=AND(task_end>=I$5,task_start<J$5)

这里定义了三个名称,分别是task_start、task_end和task_progress,这三个名称在应用到每个条件格式单元格时公式是相对引用(行变列不变),以应用在I9单元格时这三个名称所对应的引用区域为例,如下所示。

task_start=项目日程安排!$E9

task_end=项目日程安排!$F9

task_progress=项目日程安排!$D9

此外,公式还可以在数据有效性、图表等多个场景下应用,就不一一介绍了。

4、关于函数使用的建议

我有一个理念:一共工具只要有逻辑,就一定能够为我所用,只不过是不同场合不同需求罢了。

这可能跟技多不压身是一个道理吧。但我这里更想强调的是,我们学一个工具或者技能,本质上是在学其中的逻辑。

回到Excel函数上来说,我们要学习的不是几个函数在几个特定场景下的示例,而是学习各个函数的特性,当没有现成可用的函数的时候,如何利用函数特性来构造自己需要的函数。理解函数本质特性才能灵活应用,这也是理解为什么有一些特定的组合出现。

举个例子。

问题:

以下是上万条线路的妥投情况,需要知道每个线路是在第几天妥投率超过60%。

Excel数据分析——函数与公式(下)

▴ 函数构造应用示例

解法:

简单做法是从第一天开始筛选60%的,大于60%就标个对应天数,然后后边的每一列都基于前N天为否的继续筛选。无非就是繁琐而已,当天数很多时效率必然低下。

如果应用函数来解决,需要把问题拆解为两步:

  • 先把这个比60%大的最小值找出来(这个在排序函数里面讲过,LARGE+COUNTIF组合公式得到“大于某个数的数组中最小值”),公式=LARGE(C6:L6,COUNTIF(C6:L6,'>60%'))
  • 然后匹配这个数的位置,公式=MATCH(M6,C6:L6,0)。

我们如果充分理解函数原理,公式就还可以继续简化。

公式=11-COUNTIF(C6:L6,'>60%'),即总天数10减去大于60%的所有天数+1,即开始大于60%是在第几天。

其他一些使用函数的建议

  • 能引用的(存储成表或单元格中)的,就不要作为常量参数放在公式中。
  • 函数是否要嵌套,取决于中间过程有没有必要保留。函数组合和函数嵌套是不同的两个概念,函数组合是指函数之间的搭配,而嵌套只是一个函数的输出是另一个函数的输入。不建议把一个函数嵌套太多层,不方便排查。
  • 如果是结构化规范数据,上游如有处理数据能力,就都在上游解决,不要落到Excel层面来解决。
  • 能用Excel透视表解决的就不要用Excel公式。比如FREQUENCY函数,所以前面都没讲。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多