ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 后裔统计问题分享与解答(递归函数),大家有更好的办法吗?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-7-20 07:04 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
micch 发表于 2024-7-19 13:57
新函数很强大,新函数也能递归,不过我对递归不熟悉,所以不知道递归怎么写,只能直接枚举强算

递归的公式:=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))
抠掉几个字符后的公式:=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))

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-7-20 07:05 来自手机 | 显示全部楼层

SQL 递归查询:
//select * from 统计后裔 limit 20;
with recursive under_alice(old_rowid,统计以下人员的数量,下级,关系) as (
select Sheet1.rowid,统计以下人员的数量,子,关系 from Sheet1 left join 统计后裔 on 统计以下人员的数量 like 父 union all select  old_rowid,统计以下人员的数量,x.子,x.关系 from 统计后裔 x join under_alice on x.父=under_alice.下级

)
select old_rowid, 统计以下人员的数量,sum(关系="儿子") 男性,sum(关系="女儿") 女性 from under_alice group by 统计以下人员的数量 order by old_rowid;


Screenshot_2024-07-20-07-01-30-676_com.mmbox.xbrowser.pro.jpg

TA的精华主题

TA的得分主题

发表于 2024-7-20 07:41 | 显示全部楼层
练习,字典+递归。

后裔统计(vba).7z

29.55 KB, 下载次数: 10

TA的精华主题

TA的得分主题

发表于 2024-7-20 09:05 | 显示全部楼层
简小白 发表于 2024-7-19 14:08
借助AI解释一下函数

AI  都这么厉害了?!!!!!!!!!!!

TA的精华主题

TA的得分主题

发表于 2024-7-20 11:39 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-7-21 10:49 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
学习wps image.png

TA的精华主题

TA的得分主题

发表于 2024-7-21 14:53 | 显示全部楼层
#在这里快速回复#Function 后裔(姓名, 性别)     s = Split(Trim(后裔名(姓名)), " ")     For Each s1 In s         If IIf(Split(s1, ",")(1) = "儿子", "男性", "女性") = 性别 Then n = n + 1     Next s1     后裔 = n End Function Function 后裔名(姓名)     arr = Range(Cells(2, 1), Cells(Rows.Count, 3).End(xlUp))     For i = 1 To UBound(arr)         If arr(i, 1) = 姓名 Then s = s & " " & arr(i, 3) & "," & arr(i, 2) & 后裔名(arr(i, 3))     Next i     后裔名 = s End Function

TA的精华主题

TA的得分主题

发表于 2024-7-21 14:54 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Function 后裔(姓名, 性别)
    s = Split(Trim(后裔名(姓名)), " ")
    For Each s1 In s
        If IIf(Split(s1, ",")(1) = "儿子", "男性", "女性") = 性别 Then n = n + 1
    Next s1
    后裔 = n
End Function
Function 后裔名(姓名)
    arr = Range(Cells(2, 1), Cells(Rows.Count, 3).End(xlUp))
    For i = 1 To UBound(arr)
        If arr(i, 1) = 姓名 Then s = s & " " & arr(i, 3) & "," & arr(i, 2) & 后裔名(arr(i, 3))
    Next i
    后裔名 = s
End Function
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 04:41 , Processed in 0.031376 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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