ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论] 又是一个去重题,预设答案很长很长很长。。。

[复制链接]

TA的精华主题

TA的得分主题

发表于 2021-8-26 20:42 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

218符解还是未能少于200符=IFNA(LOOKUP(,0/(PHONETIC(OFFSET(A$1:B$1,{0;1;2},-MOD(COLUMNS($A:C),3)))=FILTERXML("<a><b>"&TEXTJOIN("</b><b>",,PHONETIC(OFFSET($A$1:$B$1,{0,1,2},{0;3;6})))&"</b></a>","a/b[preceding::*=.=0]["&ROW()&"]")),A$1:A3),"")

TA的精华主题

TA的得分主题

发表于 2021-8-27 01:45 | 显示全部楼层
keroro_zoro 发表于 2021-8-26 20:42
218符解还是未能少于200符=IFNA(LOOKUP(,0/(PHONETIC(OFFSET(A$1:B$1,{0;1;2},-MOD(COLUMNS($A:C),3)))=F ...

208符=IFNA(LOOKUP(,0/(PHONETIC(OFFSET(A$1:B$1,{0;1;2},-MOD(COLUMNS($A:C),3)))=FILTERXML("<a>"&CONCAT("<b>"&PHONETIC(OFFSET($A$1:$B$1,{0,1,2},{0;3;6}))&"</b>")&"</a>","a/b[preceding::*=.=0]["&ROW()&"]")),A:A),"")

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-8-27 11:33 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
因为PHONETIC支持多维数组,所以可以改为:
=IFNA(LOOKUP(,0/(PHONETIC(OFFSET(A$1:B$1,{0;1;2},-MOD(COLUMN(C1),3)))=FILTERXML("<a>"&CONCAT("<b>"&PHONETIC(OFFSET($A$1:$B$1,{0,1,2},{0;3;6}))&"</b>")&"</a>","a/b[preceding::*=.=0]["&ROW()&"]")),A:A),"")

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-8-27 22:25 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 cinlo 于 2021-8-27 22:37 编辑

按惯例,结贴是不是应该新开一贴:
那我复制一下楼顶吧:


既然keroro_zoro已经贴出答案,那我觉得可以结束了。。。
这道题本来就是keroro_zoro提供的,答案的思路也是来源于他。。
所以,预设答案就是他那个,208字符!所以我标题就说很长很长很长。。。真的是长。。。。。。。
IFNA(LOOKUP(,0/(PHONETIC(OFFSET(B$2:C$2,{0;1;2},-MOD(COLUMN(C1),3)))=FILTERXML("<a>"&CONCAT("<b>"&PHONETIC(OFFSET($B$2:$C$2,{0,1,2},{0;3;6}))&"</b>")&"</a>","a/b[preceding::*=.=0]["&ROW(A1)&"]")),B$2:B4),"")
因为PHONETIC支持多维引用,所以MOD里边直接用COLUMN(C1)就可以了。。
我没有使用ROW(),而是用来ROW(A1),觉得还是这样适用性好一点。。。

解决思路就是去重,所以我把它归到去重题。。当然,去重后就是排序,所以满版说的排序是完全正确的!
去重后的结果从上到下一个一个去对比每个区域的数据,如果存在,就按去重后的位置排列,如果不存在,该行就空白。。

我也是刚刚才发现PHONETIC居然支持多维引用。。。。这么不起眼的一个函数,在这里真的有效地减短了公式的长度!!
这里有个需要稍微注意一下的地方就是第二个PHONETIC里边OFFSET中常量数组的写法,第2个参数是{0,1,2},第3参数是{0;3;6}
根据先行后列的规则,这样OFFSET才能得到我们模拟答案需要的排列顺序!!!

当然,如果引用的区域内有数值,PHONETIC就不好用了,这个公式就不灵了。。。所以,PHONETIC的局限性还是非常大的。。。

shaowu459版主的新函数看得我眼花缭乱,只能说版主又走到了EXCEL新函数的前沿。。
静老师的旧函数用不同思路解题,也非常体现功力。。。
说实话,除了这个预设公式,我没有其它任何的办法。。。这个思路本身也是keroro_zoro给到的。。。
其实还有个稍微短一点的公式,但是不完全符合模拟答案,只能符合相同项从上往下排在相同的行,不同项各自岔行排列
IFNA(LOOKUP(,0/(PHONETIC(OFFSET(E$2:F$2,{0;1;2},-MOD(COLUMN(F3),3)))=FILTERXML("<a><b>"&CONCAT(IF(ISTEXT($B$2:$J$4),$B$2:$J$4,"</b><b>"))&"</b></a>","a/b[preceding::*=.=0]["&ROW(D3)&"]")),E$2:E6),"")
公式的结果如下图,好象不满足出题者原意!
image.png

TA的精华主题

TA的得分主题

发表于 2021-8-27 23:46 | 显示全部楼层
本帖最后由 shaowu459 于 2021-8-27 23:48 编辑

你最后的公式是右拉下拉的吧?我用新函数写的稍微通用一些,缺点就是长,但是思路简单。就是生成下面的数组,然后去原数据中对应行提取就可以了。最后结果按F9是一个数组
图片.png

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-8-28 00:46 | 显示全部楼层
shaowu459 发表于 2021-8-27 23:46
你最后的公式是右拉下拉的吧?我用新函数写的稍微通用一些,缺点就是长,但是思路简单。就是生成下面的数组 ...

我费了九牛二虎之力才得到结果,确实是右拉,下拉!!根本没有能力再考虑结果是不是数组了。。。我要好好学习新函数了!!谢谢版主!!

TA的精华主题

TA的得分主题

发表于 2021-8-28 08:08 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-6-13 10:47 , Processed in 0.037907 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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