中文数字不能排序?谁说的,赶紧去抄TEXT函数和IF({1,0})经典技巧!

文摘   2024-11-13 20:02   上海  




欢迎转发和点一下“看”,文末留言互动!

置顶公众号或设为星标及时接收更新不迷路





小伙伴们好,今天要和大家分享一道文本排序的题目。朋友们一定觉得很奇怪,文本怎样来排序呢?不要着急,请看我慢慢到来。

原题目是这样的:




题目要求按照著作的章节来排序。像这种以汉字形式数字的序列,是不能在EXCEL中直接排序的,除非事先我们做好了自定义排序。

那么,面对今天这道题目,我们该如何处理呢?


01

TEXT函数解决核心问题


我们都知道,在EXCELTEXT函数可以将阿拉伯数字转换为汉字数字形式。那么今天第一条答案的思路就有了。




在单元格C2中输入下列公式,三键确认并向下拖曳即可。

=VLOOKUP(SMALL(MATCH($A$2:$A$16,"西游记第"&TEXT(ROW($1:$9999),"[dbnum1]")&"集",),ROW(A1)),IF({1,0},MATCH($A$2:$A$16,"西游记第"&TEXT(ROW($1:$9999),"[dbnum1]")&"集",),$A$2:$A$16),2,0)

公式有些长,下面来详细介绍一下这条公式。

TEXT(ROW($1:$9999),"[dbnum1]")

利用TEXT函数,将一组数字转换为中文数字。这里ROW($1:$9999)是一个连续的自然数序列,只要足够大就可以。

第二参数是“[dbnum1]”时,TEXT函数返回的结果是{"";"";"";"";"";"";"";"";"";"一十"}这种形式的中文数字。

"西游记第"&TEXT(ROW($1:$9999),"[dbnum1]")&"集"

将它的首尾都添加后缀。这时我们发现,添加完后缀后它和A列中的数据在组合形式上相同了。

MATCH($A$2:$A$16,"西游记第"&TEXT(ROW($1:$9999),"[dbnum1]")&"集",)

接下来就可以利用MATCH函数来查找A列中的数据在上面这个新生成的数组中的位置信息。

SMALL(MATCH($A$2:$A$16,"西游记第"&TEXT(ROW($1:$9999),"[dbnum1]")&"集",),ROW(A1))

利用SMALL函数依次提取第123..小的位置值,作为VLOOKUP函数的第一参数。

IF({1,0},MATCH($A$2:$A$16,"西游记第"&TEXT(ROW($1:$9999),"[dbnum1]")&"集",),$A$2:$A$16)

这一部分是VLOOKUP函数的查找区域。它是一个152列的内存数组构成。

IF({1,0},区域1,区域2)是一个常用的技巧。它将两列单独的数据区域组合成一个数据区域。在这个新的数据区域中,第一列是MATCH函数返回的A列数据的位置信息;第二列是A列数据本身。

VLOOKUP(SMALL(MATCH($A$2:$A$16,"西游记第"&TEXT(ROW($1:$9999),"[dbnum1]")&"集",),ROW(A1)),IF({1,0},MATCH($A$2:$A$16,"西游记第"&TEXT(ROW($1:$9999),"[dbnum1]")&"集",),$A$2:$A$16),2,0)

最后,用VLOOKUP函数抓取章节目录就可以了。


02

相同思路,入手角度不同


第二种方法的总体思路也是相同的,只不过这次要从A列中的数据入手。




在单元格C2中输入下列公式,三键确认后向下拖曳即可。

=VLOOKUP(SMALL(MATCH(MID(SUBSTITUTE(A$2:A$16,"集",""),5,5),TEXT(ROW($1:$9999),"[dbnum1]"),),ROW(A1)),IF({1,0},MATCH(MID(SUBSTITUTE(A$2:A$16,"集",""),5,5),TEXT(ROW($1:$9999),"[dbnum1]"),),$A$2:$A$16),2,0)

过程相似,这里就不在赘述了。


03

万金油公式


我们还可以考虑使用万金油公式。




在单元格C2中输入下列公式,三键确认并向下拖曳即可。

=INDEX(A$2:A$16,MOD(SMALL(MATCH(MID(SUBSTITUTE(A$2:A$16,"集",""),5,5),TEXT(ROW($1:$9999),"[dbnum1]"),)*100+ROW($2:$16)-1,ROW(A1)),100))

一句话解释:

A列中的中文序号提取出来,利用MATCH函数找到其在中文序列中的位置信息。扩大100倍后再加上对应的行号。利用SMALL函数取12..小值后对100求余,最后利用INDEX函数返回答案。


本期内容练习文件提取方式:

链接: https://pan.baidu.com/s/18VTGeRY6YCKDQhHEQDzJfQ?pwd=pv5p 提取码: pv5p 


好了朋友们,今天和大家分享的内容就是这些了!喜欢我的文章请分享、转发、点赞和收藏吧!如有任何问题可以随时私信我哦!


-END-


长按下方二维码关注EXCEL应用之家

面对EXCEL操作问题时不再迷茫无助


我就知道你“在看”


推荐阅读

Excel应用之家
介绍、交流EXCEL各项功能在工作中的实际应用; 为你答疑解惑;分享各类图表、表格和模板;提供有偿代工服务。
 最新文章