ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 334|回复: 8

[分享] 几个函数使用的小体会(适合初学者,高手略过)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-11-15 19:18 | 显示全部楼层 |阅读模式
本帖最后由 yellowhawk 于 2023-11-15 19:24 编辑

       学习函数已经很长时间了,一直没有提升,我想也是自己太不上进的原因,加上在实际中没有用武之地,所以一直停留在初学的水平。
最近由于事情不太忙,所以经常来论坛解答一些问题,在解答过程中,有些想法是正确的,但在使用函数时,经常遇到一些阻碍,也就促使自己努力去查找解决的办法,或问高手(如佛山小老鼠等),有些小体会,特小结如下:
如图:
1、SUBSTITUTE函数中替换0,而不替换10中的0的小收获。
要求把D列中的数据对应E列的条件,分别写在对应的项目(F3:I3)下:
我的公式如下:=IFERROR(INDEX($D$4:$D$29,SMALL(SUBSTITUTE(($E$4:$E$29=F$3)*ROW($1:$26)-1,"-1",99)+1,ROW(A1))),"")
解析:首先使用($E$4:$E$29=F$3)判断$E$4:$E$29中值为F$3的一个数组,然后乘以ROW($1:$26)26个行序号,得到
{1;0;3;4;5;0;0;0;0;10;11;12;13;14;15;0;17;18;19;20;21;0;23;24;25;26}这样一个数组
开始我简单的以为使用SUBSTITUTE这个函数可以替换这个数组中的0为99,但实际过程中,10中的0也替换成99了,即199,这样就是错误的了。如何解决这个问题呢,我想到的是,将数组全部减1,这样0-1就得到-1,那么再用SUBSTITUTE这个替换-1这个数,就不会影响到0值的数了。替换后,由于数组都减了一个1,所以在替换后应该加上1
这里加1还有一个好处。
如果直接运算SMALL(SUBSTITUTE(($E$4:$E$29=F$3)*ROW($1:$26)-1,"-1",99),ROW(A1))这个函数时会出错,思考很久没有弄明白,最后在佛山小老鼠老师的指导下,原来SUBSTITUTE这个函数得出来的值是文本格式,一般可以在前面加“--”来转换成数值,而我正好使用加1,则自然转换成了数值。可以被small取值了。

https://club.excelhome.net/forum ... ;page=1#pid11373181这个帖子中,我也是使用了相同的思路来解决的。
=IFERROR(INDEX(F$3:F$310,SMALL(--(SUBSTITUTE(((TEXT($I$3:$I$310,"yyyy/mm")=$O$1)*(($H$3:$H$310="转账加款")+($H$3:$H$310="转账退款"))*ROW($1:$308))-1,"-1",999)+1),ROW(F58))),"")
图片1.png

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-11-15 19:47 | 显示全部楼层
2,0次方的使用,就是使一个数组中的所有值(0除外)都等于1.

具体例子如图:
=SUM(IFERROR(FIND(E6,$C$6:$C$12)^0,0)*($A$6:$A$12/$B$6:$B$12))
解析:
首先,我是找到E6在$C$6:$C$12中的位置,
{1;#VALUE!;3;#VALUE!;1;1;#VALUE!}
这中间有个3,我要统计变成1,所以使用FIND(E6,$C$6:$C$12)^0即0次方
这就是0次方的妙用。划重点。
{1;#VALUE!;1;#VALUE!;1;1;#VALUE!}
然后用iferror则将错误值替换成0值。
然后也($A$6:$A$12/$B$6:$B$12)相乘,就得到了每一个对应的值
最后将其sum加起来,就实现了要求。

183747lb1hhpp91engnvzr.png

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-11-15 21:43 | 显示全部楼层
图1 题 ,我是这样做的。

  1. =IFNA(MODE(MAX(F$3:F3)+ROW($1:20),IF(E$4:E23=F$3,D$4:D23)),"")
复制代码


image.png




TA的精华主题

TA的得分主题

发表于 2023-11-15 21:47 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
高版本的,可以写成:

=MODE.MULT(ROW($1:99),IF(E$4:E23=F$3,D$4:D23))

image.png


TA的精华主题

TA的得分主题

发表于 2023-11-15 22:57 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-11-16 09:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
丢丢表格 发表于 2023-11-15 21:47
高版本的,可以写成:

=MODE.MULT(ROW($1:99),IF(E$4:E23=F$3,D$4:D23))

我真糊涂了,这个题不就是FILTER的一个标准用法就解决了么?大佬们,你们在干什么?

TA的精华主题

TA的得分主题

发表于 2023-11-16 14:15 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
学习了,有相同体会

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-11-16 18:42 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
mountain119 发表于 2023-11-16 09:53
我真糊涂了,这个题不就是FILTER的一个标准用法就解决了么?大佬们,你们在干什么?

我们是初学者,哈哈,向您学习。

TA的精华主题

TA的得分主题

发表于 2023-11-17 09:51 | 显示全部楼层
感谢分享,对新手确实实用,善于发现问题和解决问题的思路值得借鉴。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-5-19 17:54 , Processed in 0.051486 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表