本文 GitHub https://github.com/hugogoos/Excel

想必大家小时候学习汉字的时候都有学习过笔画笔顺吧,今天小编想和大家分享如何巧妙的利用笔画排序来实现计算汉字笔画数。小编也在网上看了一些别人的实现,发现要不就是不够准确,要不就是公式太复杂,因此小编想分享一个简单的实现方式。

本篇文章更多的是为了学习:

  1. 笔画排序;
  2. 宏的录制;
  3. 逻辑思维锻炼

1、笔画排序

首先我们要了解一个基本功能:笔画排序。

在「数据」选项卡下「排序和筛选」命令组中「排序」功能里,可以设置「选项」选择「笔划排序」。

排序 实现根据笔画进行java 按笔画进行排序_excel

我们看一下动态操作效果:

排序 实现根据笔画进行java 按笔画进行排序_排序 实现根据笔画进行java_02

2、计算笔画原理梳理

有了这个笔画排序基础功能以后,我们来梳理一下逻辑。

首先Excel内部是实现了汉字笔画数的计算,不然它就无法实现笔画排序这个功能,但是Excel没有直接提供相应的方法。

那么如果我们把所有汉字都放入到Excel中,然后进行升序排序,那么从上到下的笔画应该是1,2,3……。

虽然所有汉字听起来很多,但是汉字笔画是有上限的啊,加上很多汉字笔画是相同的,那么我们把所有相同笔画数汉字都只保留第一个,那么留下的汉字理论上的个数就是笔画最多的那个汉字的笔画数。

另外小编这里知道的汉字笔画最多的是“𪚥”,这个字由四个繁体“龙”字组成,读zhé,一共64画。我们也知道笔画越多,其实字是越少的,可能有些大笔画数的汉字都不存在。

那么我们最终每个笔画数只留下了一个汉字的列表,然后我们把需要计算的汉字放到这个列表里再使用笔画排序重新排序,那么就可以根据要计算汉字前后的汉字笔画得出结果。为什么呢?

这是因为我们留下的汉字都是同笔画数中排在第一个的,因此要计算的汉字是排在它同笔画数后面并且在它后一个笔画数前面,因此计算汉字前面一个字的笔画就是我们要的结果。比如保留的列表是“一、二、三”,我们把“乙”加入以后重新排序,会得到“一、乙、二、三”,因此“乙”是一画,同理“十”加入后重新排序是“一、二、十、三”,因此是两画。我们可以看看动态演示:

排序 实现根据笔画进行java 按笔画进行排序_excel_03

3、汉字素材准备

首先小编从网上找尽量多的汉字共70205个(需要原文档的请私信),然后使用笔画排序。

排序 实现根据笔画进行java 按笔画进行排序_excel_04

最后删除重复笔画数后留下唯一笔画数汉字48个,如下列表,可能有些字在某些机器上无法正常显示(需要原文档的请私信)。

排序 实现根据笔画进行java 按笔画进行排序_excel_05

4、录制宏解决重复劳动

到这里计算汉字笔画的基本原理已经搞清楚了,并且素材也都准备好了,但是我们还需要美化一下,毕竟不能计算一个汉字,就要重新排序一下吧。

当要重复进行某个操作的时候,你应该想到「宏」,我们可以通过录制宏来完成这一重复操作。

排序 实现根据笔画进行java 按笔画进行排序_选项卡_06

如上图,我们在红框E4单元格中输入汉字,然后点击计算就可以得到结果并显示在蓝框G4单元格中。

排序 实现根据笔画进行java 按笔画进行排序_排序 实现根据笔画进行java_07

首先在A列数据最下方A49单元格输入公式「=$E$4」,在B49单元格输入一100(大于B48中的64即可),然后在G4单元格中输入公式「=INDEX(B:B,MATCH(100,B:B,0)-1)」(这里之所以用100,而不用E4中的汉字查询,是因为输入的汉字和列表中的汉字可能相同,这样就会导致计算公式复杂度增加,选用B49中100,因为笔画列没有重复的问题,因此公式才能简洁),即通过MATCH函数查询汉字所在行,然后INDEX函数通过行号查询出值。

点击「开发工具」选项卡「代码」命令组下的「录制宏」。

排序 实现根据笔画进行java 按笔画进行排序_excel_08

然后选中A1:B49单元格区域,选择排序,设置选项以笔划排序,添加列A、列B分别以升序排序。这里选择AB两列同时排序是因为在非第一次计算时,输入的汉字和列表中的汉字重复时,输入的汉字可能在列表相同汉字的上方,AB两列同时排序为了避免这种情况,保证公式正确性简洁性。

排序 实现根据笔画进行java 按笔画进行排序_github_09

然后点击「开发工具」选项卡「代码」命令组下的「停止录制」。

5、指定宏实现计算功能

然后选中计算图形右击鼠标(计算图形是通过插入矩形形状然后设置背景添加文字),选择指定宏。

排序 实现根据笔画进行java 按笔画进行排序_excel_10

在指定宏对话框中,选中刚才录制的宏即可。

排序 实现根据笔画进行java 按笔画进行排序_excel_11

整个功能到此就完成了,下面我们看看动态效果:

排序 实现根据笔画进行java 按笔画进行排序_选项卡_12

今天的分享到这里就结束了,但是学习的道路才刚刚开始,希望我们可以在学习的道路上不断地前进,坚持不懈。

如果你有感兴趣的功能,可以告诉小编哦,小编会为你写一篇相应的文章。当然是先到先写哈,我会列一个计划表,尽量满足大家的需求,所以如果下一篇不是你要的文章,请不要着急,可能就在下下篇。记得告诉小编你想学习的功能哦。

第一时间阅读,本文 GitHub https://github.com/hugogoos/Excel