ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 双循环思路怎么解这种问题?变化了个方式,我就搞不懂了。

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-7-18 09:49 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

用双循环堆叠,但是要 求人数,这个我就有点懵了。它换了个马甲,我就傻了。。。。

请大神指导一下,谢谢!!!!



捕获.PNG

每周练手题第7期(后裔统计).rar

26.32 KB, 下载次数: 37

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-7-18 10:23 | 显示全部楼层
超级玛莉64 老师 在吗?出来指导一下吧。

TA的精华主题

TA的得分主题

发表于 2024-7-18 10:44 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
cnmlgb9998 发表于 2024-7-18 10:23
超级玛莉64 老师 在吗?出来指导一下吧。

哪个是结果?

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-7-18 10:57 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-7-18 15:25 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
没做任何优化,原始思路供参考,递归省掉一层循环
  1. =LET(f,LAMBDA(f,n,IF(OR(A$2:A$73=n),LET(s,FILTER(B$2:C$73,A$2:A$73=n),BYCOL(N(TAKE(s,,1)={"儿子","女儿"}),SUM)+BYCOL(REDUCE({0,0},DROP(s,,1),LAMBDA(x,y,VSTACK(x,f(f,y)))),SUM)),{0,0})),f(f,E2))
复制代码
8e4e6f21dbe917a9d2a495d189d2e0a.jpg
c8a31eb6af7c32c26be8c9d2c8ec18e.png

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-7-18 16:12 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 shaowu459 于 2024-7-18 17:06 编辑

更新一下,减少一个bycol和vstack:
  1. =LET(f,LAMBDA(f,n,IF(OR(A$2:A$73=n),LET(s,FILTER(B$2:C$73,A$2:A$73=n),BYCOL(N(TAKE(s,,1)={"儿子","女儿"}),SUM)+REDUCE({0,0},DROP(s,,1),LAMBDA(x,y,x+f(f,y)))),{0,0})),f(f,E2))
复制代码
下面这个字符少几个,不过没什么意义
  1. =LET(d,A$2:A$73,f,LAMBDA(f,n,IF(OR(d=n),LET(s,FILTER(B$2:C$73,d=n),BYCOL(N(TAKE(s,,1)={"儿子","女儿"}),SUM)+REDUCE(0,s,LAMBDA(x,y,x+f(f,y)))),{0,0})),f(f,E2))
复制代码
  1. =LET(d,A$2:A$73,f,LAMBDA(f,n,IF(OR(d=n),COUNTIFS(A:A,n,B:B,{"儿子","女儿"})+REDUCE(0,FILTER(C$2:C$73,d=n),LAMBDA(x,y,x+f(f,y))),{0,0})),f(f,E2))
复制代码
  1. =LET(d,A$1:A$73,f,LAMBDA(f,n,IF(OR(d=n),COUNTIFS(A:A,n,B:B,{"儿子","女儿"})+REDUCE(,IF(d=n,C$1:C$73),LAMBDA(x,y,x+f(f,y))),{0,0})),f(f,E2))
复制代码

图片.png



评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-7-18 18:59 | 显示全部楼层
shaowu459 发表于 2024-7-18 16:12
更新一下,减少一个bycol和vstack:
下面这个字符少几个,不过没什么意义

递归 太难了,我学不到,看不懂。老师能不能用 reduce 双循环 解决?????

TA的精华主题

TA的得分主题

发表于 2024-7-18 19:01 | 显示全部楼层
cnmlgb9998 发表于 2024-7-18 18:59
递归 太难了,我学不到,看不懂。老师能不能用 reduce 双循环 解决?????

都可以,不过意义不大。就都堆积出来,数儿子和女儿的个数就OK了,有空看看。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-7-18 19:03 | 显示全部楼层
shaowu459 发表于 2024-7-18 19:01
都可以,不过意义不大。就都堆积出来,数儿子和女儿的个数就OK了,有空看看。

谢谢,请抽空帮指导一下。我想学学 。

递归,我真的学不进去。感觉 大脑回路不够,理解不进去。

TA的精华主题

TA的得分主题

发表于 2024-7-18 22:52 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
改成下拉公式了,主体没动,筛选的时候连着B列一起筛选。

  1. =MAP({"儿子","女儿"},LAMBDA(z,SUM(N(z=IFNA(REDUCE(E2,N1:N6,LAMBDA(x,y,DROP(REDUCE(0,SEQUENCE(ROWS(x)),LAMBDA(m,n,LET(_a,TOROW(INDEX(x,n,),3),_b,A$2:A$73=TAKE(_a,,-1),VSTACK(m,IF(OR(_b),IFNA(HSTACK(_a,FILTER(B$2:C$73,_b,0)),),_a))))),1))),"")))))
复制代码

图片.jpg

评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-9-21 19:48 , Processed in 0.040870 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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