excel公式技巧: 比较字符串中的字符
时间:2023-11-19 06:31:17
在单元格A2中给定一个字符串值,仅由大写字母组成且字符长度至少为2。在单元格B2中输入公式:如果A2中字符串的各个字符按字母升序排列(从左到右),则返回TRUE;否则返回FALSE。如图1所示。
图1
先不看答案,自已动手试一试。
公式
在单元格B2中的公式为:
=AND(GESTEP(MMULT(CODE(MID(A2,ROW(INDEX(A:A,1):INDEX(A:A,LEN(A2)-1))+{0,1},1)),{-1;1}),0))
向下拖拉即可。
公式解析
首先,让我们看一下公式中的用于生成要传递给MID函数的参数的数组的结构:
ROW(INDEX(A:A,1):INDEX(A:A,LEN(A2)-1))
该构造与下面的标准结构返回相同的数组:
ROW(INDIRECT(“1:”&LEN(A2)-1))
两者比较,后者更具有易失性。
如果单元格A2中的字符串为“AABBCCCC”,很显然有8个字符,可以得到:
ROW(INDEX(A:A,1):INDEX(A:A,7))
转换为:
ROW(A1:A7)
得到:
{1;2;3;4;5;6;7}
现在,大多数解决方案在这里所做的就是首先将此数组传递给MID函数作为其参数start_num的值:
MID(A2,{1;2;3;4;5;6;7},1)
转换为:
{“A”;”A”;”B”;”B”;”C”;”C”;”C”}
然后,使用下面的数组执行类似运算:
{2;3;4;5;6;7;8}
代入MID函数:
MID(A2,{2;3;4;5;6;7;8},1)
转换为:
{“A”;”B”;”B”;”C”;”C”;”C”;”C”}
最后,对这两个数组进行比较。没错!这是针对本问题的一种合理的解决方案。
实际上我们可以一步生成这两个数组,而不是用这种方式生成两个单独的数组。只需要确保能够对所得到的单个数组执行我们所需的比较。这里的技术是,将数组:
{1;2;3;4;5;6;7}
与下面的数组相加:
{0,1}
注意,该数组必须与前面的数组正交。由于第一个是单列数组,因此需要确保第二个是单行数组。因此:
{1;2;3;4;5;6;7}+{0,1}
由第二个数组中的两个值与第一个数组中的每个值相加,得到:
{1,2;2,3;3,4;4,5;5,6;6,7;7,8}
此时,公式转换为:
=AND(GESTEP(MMULT(CODE(MID(A2,{1,2;2,3;3,4;4,5;5,6;6,7;7,8},1)),{-1;1}),0))
先看这部分:
MID(A2,{1,2;2,3;3,4;4,5;5,6;6,7;7,8},1)
转换为:
{“A”,”A”;”A”,”B”;”B”,”B”;”B”,”C”;”C”,”C”;”C”,”C”;”C”,”C”}
可以看到,包含与先前两个独立数组完全相同的元素,尽管它们组合成一个7行2列的数组。
现在,获取每个字符的ASCⅡ编码:
CODE({“A”,”A”;”A”,”B”;”B”,”B”;”B”,”C”;”C”,”C”;”C”,”C”;”C”,”C”})
得到:
{65,65;65,66;66,66;66,67;67,67;67,67;67,67}
现在必须确保可以相应地操纵上述数组,将每行中的两个元素彼此相减。仍然使用矩阵运算,很容易解决:
MMULT({65,65;65,66;66,66;66,67;67,67;67,67;67,67},{-1;1})
结果为:
{0;1;0;1;0;0;0}
这类似于在两个单独的数组之间进行比较:
{“A”;”A”;”B”;”B”;”C”;”C”;”C”}<{“A”;”B”;”B”;”C”;”C”;”C”;”C”}
然后将得到的TRUE/FALSE值转换成等价的数值。
最后,简单地查询该数组的哪个元素大于或等于0(这实际上意味着一个元素的ASCII码与上一个元素的ASCII码之差大于或等于0,即等效于前面的字符等于或小于后面的字符):
=AND(GESTEP({0;1;0;1;0;0;0},0))
转换为:
=AND({1;1;1;1;1;1;1})
结果为:
TRUE
小结
1.学习Excel怎么处理两个正交且元素数量不同的数组的运算。
2.学习如何通过数组运算比较两组值的大小。
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
win10电脑声音变成娃娃音了怎么办?具体恢复解决方法
![](https://img.aspxhome.com/file/2023/28/a245741_0s.jpg)
realtek high definition audio声卡耳机无声的详细解决方法
![](https://img.aspxhome.com/file/2023/2/a284758_0s.jpg)
如何将视频转换为GIF?
![](https://img.aspxhome.com/file/2023/5/a206635_0s.jpeg)
Win10专业版耳麦声音怎么设置
![](https://img.aspxhome.com/file/2023/26/a223268_0s.png)
最新的Win10更新致使部分设备长时间黑屏
![](https://img.aspxhome.com/file/2023/4/a311738_0s.jpg)
MacOS上界面精美的10款App推荐
win10系统如何查看电脑显存
![](https://img.aspxhome.com/file/2023/5/46505_0s.jpg)
如何使用 Windows Hello那样进入系统体验教程?
![](https://img.aspxhome.com/file/2023/30/a262538_0s.jpg)
在win7系统上怎么设置电脑开机密码?
![](https://img.aspxhome.com/file/2023/28/a245623_0s.jpg)
剪映电脑版如何去除水印?
![](https://img.aspxhome.com/file/2023/6/a324281_0s.png)
金山WPS表格中轻松统一日期格式
![](https://img.aspxhome.com/file/2023/4/a164374_0s.jpg)
excel2007怎么冻结前两行不动?excel冻结窗格功能使用介绍
![](https://img.aspxhome.com/file/2023/6/41836_0s.jpg)
win10系统office2013打印机默认设置方法
![](https://img.aspxhome.com/file/2023/4/a312776_0s.jpg)
windows8怎么设置开机自动拨号以简化开机手工拨号
![](https://img.aspxhome.com/file/2023/29/a255012_0s.jpg)
PPT怎么画篮球架的简笔画?
![](https://img.aspxhome.com/file/2023/10/a349991_0s.jpg)
Win10预览体验成员调查奖Surface Book 真有钱
![](https://img.aspxhome.com/file/2023/5/a316535_0s.jpg)
Win10 Mobile 10166发布:修复10149中大量已知BUG
![](https://img.aspxhome.com/file/2023/28/a249167_0s.jpg)
win11笔记本不插电源特别卡怎么解决?
![](https://img.aspxhome.com/file/2023/30/a264579_0s.jpg)
万能看图王有哪些实用功能?万能看图王6大功能详解
![](https://img.aspxhome.com/file/2023/7/a329641_0s.jpg)