这是网友求助的一个问题,如果要将多列英文字母合并到同一个单元格中,如何让合并后的字母自动按从小到大的顺序排列?
也就是按 26 个字母的先后顺序自动重排一下。
彩蛋在案例 2,难度成几何级数上升,请务必看到最后。
案例 1:两列字母将下图 1 中 A、B 列的字母合并后放在 D 列,合并后的字母组合必须按字母顺序从小到大排列。
效果如下图 2 所示。
解决方案 1:1. 在 D2 单元格中输入以下公式 --> 向下拖动复制公式:
=IF(A1>B1,B1&A1,A1&B1)
公式释义:
如果 A1>B1,则先 B 后 A,反正则先 A 后 B;
* 没错,字母的先后顺序是可以用 if 函数来判断的。
案例 2:三列字母如果变成三列,情况就要复杂得多。因为排列组合的可能性有 6 种,我们就不能再用 if 了,嵌套太多了。
这种情况就需要用判断大小的函数来替代。
解决方案 2:但是又遇到了新问题,虽然 if 可以判断字母的大小,但是我们所知的计算大小的函数,却只能计算数值,而无法计算文本。
先试几种可以用的。
1. 我首先想到 min、max、median 这一套。在任意空单元格中输入以下公式:
=MIN(A2:C2)
结果为 0,无法判断文本大小。
2. 那再试试 small 和 large 函数。
=SMALL(A2:C2,1)
这次直接就出错了。
到这里是不是有点绝望?别灰心,有个 code 函数,可以计算出文本所对应的编号数值。如果先用 code 转换一下,不就能比较大小了吗?
试试 code 函数。
3. 在任意单元格输入以下公式 --> 向右拖动公式:
=CODE(A2)
成功!每个字母都有专属的数值编号。
最后一个问题,如果把字符都用 code 转换成数值,排大小以后,最后如何再显示回字母呢?
还有个函数叫 char,用它再把数值转换回字母呗。
下面是正解。
1. 在 E2 单元格中输入以下公式 --> 按 Ctrl+Shift+Enter --> 下拉复制公式:
=CHAR(MIN(CODE(A2:C2)))&CHAR(MEDIAN(CODE(A2:C2)))&CHAR(MAX(CODE(A2:C2)))
公式释义:
别看公式长,其实就是前面拆解的那些;
CODE(A2:C2):先用 code 将区域内的字符转换成编号值;
然后依次用 MIN、MEDIAN、MAX 提取出它们中从小到大的值;
在上述三个函数外面分别套上 char 函数,把编号再转换回字符;
最后用连接符号“&”连接起来;
数组公式,必须三键结束