手机版

excel公式比较字符串中的字符

时间:2021-09-29 来源:互联网 编辑:宝哥软件园 浏览:

给定单元格A2中的字符串值,它仅由大写字母组成,字符长度至少为2。在单元格B2中输入公式:如果A2中字符串的字符按字母升序排列(从左到右),它将返回真;否则,返回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函数的公式的结构:

行(索引(A:A,1):索引(A:A,LEN(A2)-1))

此构造返回与以下标准结构相同的数组:

行(间接(“1:”透镜(A2)-1))

与两者相比,后者更易波动。

如果单元格A2中的字符串是“AABBCCCC”,那么它显然有8个字符,您可以得到:

行(索引(A:A,1):索引(A:A,7))

转换为:

行(A1:A7)

获取:

{1;2;3;4;5;6;7}

现在,大多数解决方案首先将这个数组作为参数start_num的值传递给MID函数:

MID(A2,{ 1;2;3;4;5;6;7},1)

转换为:

{“一”;“一”;“B”;“B”;“C”;“C”;{ C }

然后,使用以下数组执行类似的操作:

{2;3;4;5;6;7;8}

替换MID功能:

MID(A2,{ 2;3;4;5;6;7;8},1)

转换为:

{“一”;“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)

转换为:

{“一”、“一”;“甲”、“乙”;“乙”、“乙”;“乙”、“丙”;“C”、“C”;“C”、“C”;“C”、“C”}

如您所见,它包含与前面两个独立数组完全相同的元素,尽管它们被组合成一个7行2列的数组。

现在,获取每个字符的ASC编码:

CODE({“A”、“A”;“甲”、“乙”;“乙”、“乙”;“乙”、“丙”;“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}

这类似于比较两个独立的数组:

{“一”;“一”;“B”;“B”;“C”;“C”;“C”} {“A”;“B”;“B”;“C”;“C”;“C”;{ C }

然后将得到的真/假值转换成等价的数值。

最后,简单查询一下数组的哪个元素大于等于0(实际上是指一个元素的ASCII码和前一个元素的ASCII码之差大于等于0,即前面的字符等于或小于后面的字符):

=AND(GESTEP({ 0;1;0;1;0;0;0},0))

转换为:

=AND({ 1;1;1;1;1;1;1})

结果是:

真实的

总结

1.了解Excel如何处理两个元素个数不同的正交数组的运算。

2.了解如何通过数组运算比较两组值。

版权声明:excel公式比较字符串中的字符是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。