|
楼主 |
发表于 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),"")
公式的结果如下图,好象不满足出题者原意!
|
|