excel公式教程:求字符串中的数字组成的数能够被指定数整除的数的个数( 二 )


这个数组由单元格A1中的字符串拆分后的所有可能的子字符串组成 。
但是,仔细观察会发现,这个数组中有很多重复的字符串,如果将其与3、5、7相除的话,所得到的值的数量肯定会大于真实值 。例如,数组中后面关于771、71和1的一些数据:
=MID(A1,14,3)
的值为“771”,其后的:
=MID(A1,14,4)
=MID(A1,14,5)
=MID(A1,14,6)

=MID(A1,14,16)
都返回“771” 。
因为对于MID函数来说,如果指定的字符数量超过了字符本身,将获取到字符末尾的字符串 。
因此,现在的重点是将该数组转化为(MID函数到字符串长度限制后)没有重复字符串的数组 。这意味着,对于生成的16行16列矩阵中每一行,将TRUE传递给所有未在该行中重复或在该行中首次出现的值,否则将FALSE传递给其他值 。
这样,下面的部分公式能够生成所需的TRUE/FALSE值数组:
1+LEN(A1)-Arry1>=TRANSPOSE(Arry1)
转换为:
1+16-{1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16}>=TRANSPOSE({1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16})
转换为:
{16;15;14;13;12;11;10;9;8;7;6;5;4;3;2;1}>={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}
对第一个数组16个值中的每个值是否大于第二个数组中的16个值,执行256次比较,得到结果:
{TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE;TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,FALSE;TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,FALSE,FALSE;TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,FALSE;TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,FALSE,FALSE;TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,FALSE,FALSE,FALSE;TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE;TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE;TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE;TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE;TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE;TRUE,TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE;TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE;TRUE,TRUE,TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE;TRUE,TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE;TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE}
虽然没有必要,但是将这些布尔值转换为等效的数值看起来可能会更清晰:
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1;1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0;1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0;1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0;1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0;1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0;1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0;1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0;1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0;1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0;1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0;1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0;1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0;1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0;1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0;1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
这意味着,对于我们的16行16列的结果矩阵中的第一行,它对应于MID(A1,1,1)、MID(A1,1,2)、MID(A1,1,3)、…、MID(A1,1,16),这些值都是有效的,因为显然他们都不是彼此重复的 。
对于该矩阵数组中的第二行,对应于MID(A1,2,1)、MID(A1,2,2)、MID(A1,2,3)、…、MID(A1,2,16),除了最后一个值外都是有效的,因为MID(A1,2,15)和MID(A1,2,16)都等于“X30X5XXX42XX771” 。
依此类推 。最后的结果就是我们想要的(MID函数到字符串长度限制后)没有重复值的数组 。因此,公式部分:

推荐阅读