ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 如何求两个人相同信息条数(见图示)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-10-21 09:29 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
daziran 发表于 2024-10-21 00:11
感谢hxj119关注!这是附件

=LET(_c,C3:C22,_d,D3:D22,_e,UNIQUE(_c),HSTACK(VSTACK("",_e),VSTACK(TOROW(_e),MAKEARRAY(ROWS(_e),ROWS(_e),LAMBDA(x,y,LET(a,FILTER(_d,_c=CHOOSEROWS(_e,x)),b,FILTER(_d,_c=CHOOSEROWS(_e,y)),IF(x<>y,SUM((ISNUMBER(MATCH(a,b,0)))*1),0)))))))
image.png

TA的精华主题

TA的得分主题

发表于 2024-10-21 09:38 | 显示全部楼层
=LET(m,GROUPBY($D$3:$D$11,$C$3:$C$11,ARRAYTOTEXT,,0),n,SUM(N(TEXTJOIN(", ",,$F3,G$2)=TAKE(m,,-1))),IF(n=0,"",n))

TA的精华主题

TA的得分主题

发表于 2024-10-21 10:15 | 显示全部楼层
  1. =LET(T,FILTER($D$3:$D$11,$C$3:$C$11=$F3,""),_T,FILTER($D$3:$D$11,$C$3:$C$11=G$2,""),IF(G$2=$F3,"",SUM((T=_T)*1)))
复制代码
学生的信息必须是图中的顺序

TA的精华主题

TA的得分主题

发表于 2024-10-21 10:33 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
=LET(s,COUNTIFS($C:$C,$F3,$D:$D,UNIQUE($D$3:$D$11)),IFERROR(1/IF($F3=G$2,0,SUM((s>0)*(s=COUNTIFS($C:$C,G$2,$D:$D,UNIQUE($D$3:$D$11)))))^-1,""))

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-10-21 13:43 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
感谢这么多朋友帮助。热心善良水平高,正是excelhome特色。
这是一类典型的问题。回帖思路不同,各有巧妙。稍后我统一报告

TA的精华主题

TA的得分主题

发表于 2024-10-21 14:36 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
G3 右拉 下拉{=IF((ROW(A1)<=COLUMN(A1))+($F3=""),"",COUNT(MATCH(IF($C$3:$C$99=$F3,$D$3:$D$99,"A"),IF($C$3:$C$99=G$2,$D$3:$D$99,"B"),)))
13277.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-10-21 22:50 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 daziran 于 2024-10-21 22:56 编辑

小结。
前面的回帖已经完全符合我的需求。但这么多高水平算法,我必须认真学习,逐一测试,报告如下(其中的“思路”是我的肤浅理解):
1.飞天篮球猪
提供了两个厉害解法。但我没装Power Query和Power Pivot插件,没测试。
2.李贵濮
=COUNTA(FILTER(B1:B8,(A1:A8=D3)+(A1:A8=F2)))-COUNTA(UNIQUE(FILTER(B1:B8,(A1:A8=D3)+(A1:A8=F2))))
运行成功。
思路:用Filter函数,分别按【F列姓名】、【第2行姓名】获得【信息列】(放在同一个数组);另外再获得一个同样的数组,用UNIQUE去重;二者数量相减。
3.ww87725244
(1)

=IF($F3=G$2,"",SUM(N(TOCOL(IF($C$3:$C$11=$F3,$D$3:$D$11,0/0),3)=TOCOL(IF($C$3:$C$11=G$2,$D$3:$D$11,0/0),3))))
运行未成功。
思路:第1个【TOCOL(IF】获得【F列姓名】对应的【信息列】,第2个【TOCOL(IF】获得【第2行李四】对应的【信息列】,二者对比,求和。
(2)
=LET(m,GROUPBY($D$3:$D$11,$C$3:$C$11,ARRAYTOTEXT,,0),n,SUM(N(TEXTJOIN(", ",,$F3,G$2)=TAKE(m,,-1))),IF(n=0,"",n))
运行成功。
思路:用GROUPBY获得【二维表】,包含【信息】及其对应的【姓名】表,用TAKE仅保留这个表的【姓名列】,再与用TEXTJOIN合并的【两个姓名】作比较,求和。
4.我要成为专家
=IF($F3=G$2,"",TEXT(SUM(COUNTIFS($C:$C,G$2,$D:$D,FILTER($D:$D,$C:$C=$F3))),"[>]"))
运行成功。
思路:用FILTE函数,按包括【F列姓名】筛选【信息列】;用COUNTIFS函数,【第2行姓名】、【信息列】分别作为criteria;求和。
5.我会修电视
=LET(X,FILTER($D:$D,($C:$C=$F3)+($C:$C=G$2)),COUNTA(X)-COUNTA(UNIQUE(X)))
运行成功。
思路:与李贵濮提供算法类似。用LET-X进行简化。
6.hxj119
=MAP($G$2:$I$2,LAMBDA(x,LET(a,$D$3:$D$11,b,$C$3:$C$11,IF(x=$F3,"",SUM(N(FILTER(a,b=$F3)=TRANSPOSE(FILTER(a,b=x))))))))
运行成功。
思路:用两个Filter函数分别【按F列姓名】、【第3行姓名】获得【信息列】;TRANSPOSE转置后对比求和。用map、lambda、let简化代码。公式结果为数组,仅需在F列写入公式。
7.wp231957
=LET(_c,C3:C22,_d,D3:D22,_e,UNIQUE(_c),HSTACK(VSTACK("",_e),VSTACK(TOROW(_e),MAKEARRAY(ROWS(_e),ROWS(_e),LAMBDA(x,y,LET(a,FILTER(_d,_c=CHOOSEROWS(_e,x)),b,FILTER(_d,_c=CHOOSEROWS(_e,y)),IF(x<>y,SUM((ISNUMBER(MATCH(a,b,0)))*1),0)))))))
运行成功。
思路:看着累。特点:只需在一个单元格F2输入上述公式,自动生成二维表结果。
8.你是那块小饼干
=LET(T,FILTER($D$3:$D$11,$C$3:$C$11=$F3,""),_T,FILTER($D$3:$D$11,$C$3:$C$11=G$2,""),IF(G$2=$F3,"",SUM((T=_T)*1)))
运行成功。本算法适用于每个人的行数相同(我给的示例中每人三行)。
思路:用FILTER根据【F列姓名】获得【信息列】,用FILTER根据【第2行姓名】获得【信息列】,两列对比求和。
9.mykitami
=LET(s,COUNTIFS($C:$C,$F3,$D:$D,UNIQUE($D$3:$D$11)),IFERROR(1/IF($F3=G$2,0,SUM((s>0)*(s=COUNTIFS($C:$C,G$2,$D:$D,UNIQUE($D$3:$D$11)))))^-1,""))
运行成功。
思路:UNIQUE获得【不重复信息列】,COUNTIFS根据【F列姓名】和【不重复信息列】获得【数量表】;类似的,根据【第2行姓名】和【不重复信息列】获得【数量表】,两个【数量表】比对求和。
10.hcm19522
=IF((ROW(A1)<=COLUMN(A1))+($F3=""),"",COUNT(MATCH(IF($C$3:$C$99=$F3,$D$3:$D$99,"A"),IF($C$3:$C$99=G$2,$D$3:$D$99,"B"),)))
运行成功。
思路:用IF函数按【F列姓名】获得【信息列1】,再用IF按【第2行姓名】获得【信息列2】;用MATCH函数,以【信息列1】的值到【信息列2】查找;最后COUNT计数。本算法没用前面帖子中的高级函数,可算是常规函数运用典范了(公式中IF-ROW-COLUMN进行排除,熟练之极)。

22.png

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-10-22 09:19 | 显示全部楼层
开个火车~~~~~~~~~~~~~
G3单元格
=IF($F3=G$2,"",ROWS(VSTACK(FILTER($D$3:$D$11,$C$3:$C$11=$F3),FILTER($D$3:$D$11,$C$3:$C$11=G$2)))-ROWS(UNIQUE(VSTACK(FILTER($D$3:$D$11,$C$3:$C$11=$F3),FILTER($D$3:$D$11,$C$3:$C$11=G$2)))))


TA的精华主题

TA的得分主题

 楼主| 发表于 2024-10-22 19:50 | 显示全部楼层
【mjm04】兄这个解法验证成功。
   用两个Filter函数,分别获得【信息列】,用VSTACK放到一起;再获得同样的【信息列】,用UNIQUE去重;二者数量相减。
家友们太熟练了!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-22 15:52 , Processed in 0.039854 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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