ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论] REDUCE函数-总编号与分组编号

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-6-22 18:55 | 显示全部楼层 |阅读模式

在学习超版的REDUCE函数时,有关汇总并进行总体编号、分组编号的情况,问题如图,“南方”、“北方”在按照“分类”重新组合后的总编号问题。

1. 附件中 I2 的公式,达到了目的,但是总觉得思路比较笨拙,公式也较长,有无简洁一些的方法?
2. F、G两列是辅助列,作为“分类”项标题使用。如果不用辅助列,比较简洁的公式该如何写?

问题本身已经解决,纯属讨论,欢迎指导!!
微信图片_20240622184301.png

Reduce函数-分类项总编号与分组编号.zip

13.59 KB, 下载次数: 7

TA的精华主题

TA的得分主题

发表于 2024-6-22 19:59 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
不用辅助列
=LET(a,UNIQUE(C2:C67),DROP(REDUCE(0,a,LAMBDA(x,y,LET(b,XLOOKUP(MATCH(y,a,),SEQUENCE(5),{"一";"二";"三";"四";"五"}&"、"),c,FILTER(B2:D67,C2:C67=y),d,TEXT(SEQUENCE(ROWS(c)),"000-"),VSTACK(x,VSTACK(b&y&"("&ROWS(c)&"项)",TEXT(LEFT(TAKE(x,-1),3)+SEQUENCE(ROWS(c)),"000-")&INDEX(c,,1)&MID(d,2,2)&":"&INDEX(c,,3)))))),1))

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-6-22 20:29 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
PQ 解决方案。


香不香??????????



捕获.PNG
捕获2.PNG

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-22 21:06 | 显示全部楼层
mykitami 发表于 2024-6-22 19:59
不用辅助列
=LET(a,UNIQUE(C2:C67),DROP(REDUCE(0,a,LAMBDA(x,y,LET(b,XLOOKUP(MATCH(y,a,),SEQUENCE(5),{ ...


这一累加方法竟然没想到:LEFT(TAKE(x,-1),3)+SEQUENCE(ROWS(c))。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-22 21:08 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册


纯粹自己处理数据,PQ没毛病。但是需要跟别人交流数据或文件,PQ不方便。

TA的精华主题

TA的得分主题

发表于 2024-6-22 21:55 | 显示全部楼层
直接拼了一个,没太优化,供参考。

  1. =DROP(REDUCE(0,UNIQUE(C2:C67),LAMBDA(x,y,LET(s,FILTER(A2:D67,C2:C67=y),r,ROWS(s),t,SEQUENCE(r),VSTACK(x,TEXT(COUNT(FIND("、",x))+1,"[dbnum1]0、")&y&"("&r&"项)",TEXT(t+LEFT(TAKE(x,-1),3),"000-")&INDEX(s,,2)&TEXT(t,"00:")&DROP(s,,3))))),1)
复制代码




评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-22 22:11 | 显示全部楼层
shaowu459 发表于 2024-6-22 21:55
直接拼了一个,没太优化,供参考。

学习了!
思路跟2楼基本差不多,尤其累加总编号方法是一致的。在分类标题上,超版使用 TEXT(,"[dbnum1]0、") 的方法更好些,因为分类不一定正好就是5个。

TA的精华主题

TA的得分主题

发表于 2024-6-22 22:20 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
edwin11891 发表于 2024-6-22 22:11
学习了!
思路跟2楼基本差不多,尤其累加总编号方法是一致的。在分类标题上,超版使用 TEXT( ...

编号的问题,如果x里没有其他干扰因素,一般用rows(x)为基础做。因为有的时候并不是筛选出来的行数都会保留下来,有可能是那些行整合后的结果,所以x的最终行数不一定和原数据行数一致,这种情况下,可以考虑x的累计行数编号。

TA的精华主题

TA的得分主题

发表于 2024-6-22 22:24 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
x档案中内容,供其他浏览到这个帖子的人参考。你这个例子有小标题干扰,但是又直接有累计最大编号可用,和这个rows编号例子不同。

图片.jpg


TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-22 22:36 | 显示全部楼层
shaowu459 发表于 2024-6-22 22:24
x档案中内容,供其他浏览到这个帖子的人参考。你这个例子有小标题干扰,但是又直接有累计最大编号可用,和 ...

是的,就是因为小标题导致ROWS(x)方法不可用,所以我的方法中采用了数小标题个数,然后再相减的方法。

在另外一个实际应用中,对这问题我采用了在REDUCE函数中使用 LET(Tnum,IF(TAKE(x,-1,1)="总编号",1,TAKE(x,-1,1)+1))统计总编号的方法,为避免干扰,没有加入到这个主题中来。

多谢超版的解惑!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-9-27 21:21 , Processed in 0.041727 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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