ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 哪位大神帮我详细解释一下这个公式:

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-4-2 09:36 | 显示全部楼层 |阅读模式
公式的目的是为了提取A1:A14单元格内不重复的数值,公式我试过了,运行没问题,哪位大神能帮我详细解释一下公式的用法和函数的参数:
=INDEX(A:A,SMALL(IF(MATCH(A$1:A$14,A:A,)=ROW($1:$14),ROW($1:$14),99),ROW(A2)))&""

TA的精华主题

TA的得分主题

发表于 2024-4-2 09:43 | 显示全部楼层
本帖最后由 hxj119 于 2024-4-2 09:44 编辑

自己一个一个函数的拆解看一下在做啥,就会清楚明白,这是需要一定的函数知识能力才能更好的领悟

TA的精华主题

TA的得分主题

发表于 2024-4-2 09:44 | 显示全部楼层
本帖最后由 高个子 于 2024-4-2 10:06 编辑

提取不重复项的一个思路是找每一个元素第一次出现的位置,然后把对应位置的元素都提取出来。match找到的是元素第一次出现的位置,所以可以对每一个元素都用match,找到的都是第一次出现的位置。如果那个位置和行号比较相等,则那个位置就是每个元素第一次出现的位置,需要给这个位置一个行号。然后用small函数提取第一小、第二小……第n小的行号,用index函数确定引用位置。这个是数组公式,需要三键结束,然后下拉

TA的精华主题

TA的得分主题

发表于 2024-4-2 09:48 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 swl4561255 于 2024-4-2 09:50 编辑

一、IF(MATCH(A$1:A$14,A:A,)=ROW($1:$14),ROW($1:$14),99)
查找A1:A14中的每一个数据在A列中对应的序号数,如果刚好与行号相同,则返回对应的行号,否则返回99
二、SMALL(IF(MATCH(A$1:A$14,A:A,)=ROW($1:$14),ROW($1:$14),99),ROW(A2))
在上一步得到的数值序列中取第二小的数。
三、INDEX(A:A,SMALL(IF(MATCH(A$1:A$14,A:A,)=ROW($1:$14),ROW($1:$14),99),ROW(A2)))
得到A列中第二个数据,即A2单元格的值。
=INDEX(A:A,SMALL(IF(MATCH(A$1:A$14,A:A,)=ROW($1:$14),ROW($1:$14),99),ROW(A2)))&""
公式向下填充时,会依次得到第三小、第四小序号对应的A列中的值,当满足条件的值都提取出来后,不满足条件的值返回的是A99 的值,A99如果是真空单元格时,如果公式中最后不加&“”,结果将返回0,如果加了&"",返回结果为“”,单元格无显示,起到容错目的。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-2 09:48 | 显示全部楼层
高个子 发表于 2024-4-2 09:44
提取不重复项的一个思路是找每一个元素第一次出现的位置,然后把对应位置的元素都提取出来。match找到的是 ...

99 和最后的&""起什么作用

TA的精华主题

TA的得分主题

发表于 2024-4-2 09:53 | 显示全部楼层
qinjf6348 发表于 2024-4-2 09:48
99 和最后的&""起什么作用

99是让排序位置在最后面些,“”转换为文本样式

TA的精华主题

TA的得分主题

发表于 2024-4-2 10:02 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-4-2 10:05 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 高个子 于 2024-4-3 10:07 编辑
qinjf6348 发表于 2024-4-2 09:48
99 和最后的&""起什么作用

99是一个大数,因为你后面都是空的,所以给个99就会提取空的出来,这个数可以给大一点,不超过1048576问题都不大。

Excel读取单元格空会变成0,“”是让你看不到0,看到的都是空的,这个你删掉&""测试一下就知道了

TA的精华主题

TA的得分主题

发表于 2024-4-2 11:00 | 显示全部楼层
建议把公式拆开,对每部分处理结果体会一下。重点在SMALL(IF(MATCH(A$1:A$14,A:A,)=ROW($1:$14),ROW($1:$14),99),ROW(A2))

TA的精华主题

TA的得分主题

发表于 2024-4-2 18:50 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
少少飞翔 发表于 2024-4-2 10:02
紫薯补丁。

强啊
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-7-27 08:43 , Processed in 0.034684 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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