学习Excel技术,关注微信公众号:

excelperfect

导语:继续研究来自于excelxor.com的案例。这个案例比较复杂,需要仔细研究。

本次的练习是:在单元格A1中输入一个任意长度的字母数字字符串,请使用公式返回该字符串中能够被3、5或7整除的数字的数量。这里,“字符串中的数字”指字符串中可以被认为是数字的任意长度的连续子字符串。例如,字符串:

XX30X5XXX42XX771

包含有13个数字:3,0,30,5,4,2,42,7,7,1,77,71,771

因为:

3可以被3整除

0可以被3、5或7整除

30可以被3或5整除

5可以被5整除

4不能被3、5或7整除

2不能被3、5或7整除

42可以被3或7整除

7可以被7整除

7可以被7整除

1不能被3、5或7整除

77可以被7整除

71不能被3、5或7整除

771可以被3整除

所以,该字符串中能够被3、5或7整除的数字的数量为9。

那么,如何编写这个公式求出这个数量呢?

先不看答案,自已动手试一试。

公式

所需要的数组公式:

=SUM(0+(MMULT(IFERROR(0+(MOD(INDEX(MID(A1,Arry1,IF(1+LEN(A1)-Arry1>=TRANSPOSE(Arry1),TRANSPOSE(Arry1))),N(IF(1,Arry3)),N(IF(1,Arry4))),{3,5,7})=0),0),{1;1;1})>0))

公式解析

公式中的Arry1、Arry2、Arry3和Arry4是定义的四个名称。

名称:Arry1

引用位置:=ROW(INDIRECT(“1:” & LEN($A1)))

名称:Arry2

引用位置:=ROW(INDIRECT(“1:” & LEN($A1)^2))-1

名称:Arry3

引用位置:=1+INT((Arry2)/LEN($A1))

名称:Arry4

引用位置:=1+MOD((Arry2),LEN($A1))

1. 先来看看MID函数部分:

MID(A1,Arry1,IF(1+LEN(A1)-Arry1>=TRANSPOSE(Arry1),TRANSPOSE(Arry1)))

依次来解析MID函数的两个参数。

(1)对于第一个参数start_num,即Arry1:

ROW(INDIRECT(“1:” & LEN($A1)))

生成从1到单元格A1中字符串长度的整数组成的数组:

{1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16}

(2)对于第二个参数num_chars,即:

IF(1+LEN(A1)-Arry1>=TRANSPOSE(Arry1),TRANSPOSE(Arry1))

在对此IF语句进行解析之前,先看一个常用的方式,即对于该参数简单地指定其为:

TRANSPOSE(Arry1),即:

{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}

此时的MID函数部分为:

MID(A1,Arry1,TRANSPOSE(Arry1))

转换为:

MID(“XX30X5XXX42XX771”,{1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16},{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16})

可以看到,传递给函数的两个数组是正交的:一个是单列数组(对应参数start_num),另一个是单行数组(对应参数num_chars)。这样,这两个数组将生成一个16行16列的矩阵,包含MID函数的所有256个可能结果。例如,生成的数组的第一个元素等于MID(A1,1,1)的结果“X”,第二个元素等于MID(A1,1,2)的结果“XX”,依此类推,最终的结果为:

{"X","XX","XX3","XX30","XX30X","XX30X5","XX30X5X","XX30X5XX","XX30X5XXX","XX30X5XXX4","XX30X5XXX42","XX30X5XXX42X","XX30X5XXX42XX","XX30X5XXX42XX7","XX30X5XXX42XX77","XX30X5XXX42XX771";"X","X3","X30","X30X","X30X5","X30X5X","X30X5XX","X30X5XXX","X30X5XXX4","X30X5XXX42","X30X5XXX42X","X30X5XXX42XX","X30X5XXX42XX7","X30X5XXX42XX77","X30X5XXX42XX771","X30X5XXX42XX771";"3","30","30X","30X5","30X5X","30X5XX","30X5XXX","30X5XXX4","30X5XXX42","30X5XXX42X","30X5XXX42XX","30X5XXX42XX7","30X5XXX42XX77","30X5XXX42XX771","30X5XXX42XX771","30X5XXX42XX771";"0","0X","0X5","0X5X","0X5XX","0X5XXX","0X5XXX4","0X5XXX42","0X5XXX42X","0X5XXX42XX","0X5XXX42XX7","0X5XXX42XX77","0X5XXX42XX771","0X5XXX42XX771","0X5XXX42XX771","0X5XXX42XX771";"X","X5","X5X","X5XX","X5XXX","X5XXX4","X5XXX42","X5XXX42X","X5XXX42XX","X5XXX42XX7","X5XXX42XX77","X5XXX42XX771","X5XXX42XX771","X5XXX42XX771","X5XXX42XX771","X5XXX42XX771";"5","5X","5XX","5XXX","5XXX4","5XXX42","5XXX42X","5XXX42XX","5XXX42XX7","5XXX42XX77","5XXX42XX771","5XXX42XX771","5XXX42XX771","5XXX42XX771","5XXX42XX771","5XXX42XX771";"X","XX","XXX","XXX4","XXX42","XXX42X","XXX42XX","XXX42XX7","XXX42XX77","XXX42XX771","XXX42XX771","XXX42XX771","XXX42XX771","XXX42XX771","XXX42XX771","XXX42XX771";"X","XX","XX4","XX42","XX42X","XX42XX","XX42XX7","XX42XX77","XX42XX771","XX42XX771","XX42XX771","XX42XX771","XX42XX771","XX42XX771","XX42XX771","XX42XX771";"X","X4","X42","X42X","X42XX","X42XX7","X42XX77","X42XX771","X42XX771","X42XX771","X42XX771","X42XX771","X42XX771","X42XX771","X42XX771","X42XX771";"4","42","42X","42XX","42XX7","42XX77","42XX771","42XX771","42XX771","42XX771","42XX771","42XX771","42XX771","42XX771","42XX771","42XX771";"2","2X","2XX","2XX7","2XX77","2XX771","2XX771","2XX771","2XX771","2XX771","2XX771","2XX771","2XX771","2XX771","2XX771","2XX771";"X","XX","XX7","XX77","XX771","XX771","XX771","XX771","XX771","XX771","XX771","XX771","XX771","XX771","XX771","XX771";"X","X7","X77","X771","X771","X771","X771","X771","X771","X771","X771","X771","X771","X771","X771","X771";"7","77","771","771","771","771","771","771","771","771","771","771","771","771","771","771";"7","71","71","71","71","71","71","71","71","71","71","71","71","71","71","71";"1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1"}

这个数组由单元格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函数到字符串长度限制后)没有重复值的数组。因此,公式部分:

IF(1+LEN(A1)-Arry1>=TRANSPOSE(Arry1),TRANSPOSE(Arry1))

的结果为:

{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16;1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,FALSE;1,2,3,4,5,6,7,8,9,10,11,12,13,14,FALSE,FALSE;1,2,3,4,5,6,7,8,9,10,11,12,13,FALSE,FALSE,FALSE;1,2,3,4,5,6,7,8,9,10,11,12,FALSE,FALSE,FALSE,FALSE;1,2,3,4,5,6,7,8,9,10,11,FALSE,FALSE,FALSE,FALSE,FALSE;1,2,3,4,5,6,7,8,9,10,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE;1,2,3,4,5,6,7,8,9,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE;1,2,3,4,5,6,7,8,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE;1,2,3,4,5,6,7,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE;1,2,3,4,5,6,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE;1,2,3,4,5,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE;1,2,3,4,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE;1,2,3,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE;1,2,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE;1,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE}

(3)这意味着,公式部分:

MID(A1,Arry1,IF(1+LEN(A1)-Arry1>=TRANSPOSE(Arry1),TRANSPOSE(Arry1)))

的结果为:

{"X","XX","XX3","XX30","XX30X","XX30X5","XX30X5X","XX30X5XX","XX30X5XXX","XX30X5XXX4","XX30X5XXX42","XX30X5XXX42X","XX30X5XXX42XX","XX30X5XXX42XX7","XX30X5XXX42XX77","XX30X5XXX42XX771";"X","X3","X30","X30X","X30X5","X30X5X","X30X5XX","X30X5XXX","X30X5XXX4","X30X5XXX42","X30X5XXX42X","X30X5XXX42XX","X30X5XXX42XX7","X30X5XXX42XX77","X30X5XXX42XX771","";"3","30","30X","30X5","30X5X","30X5XX","30X5XXX","30X5XXX4","30X5XXX42","30X5XXX42X","30X5XXX42XX","30X5XXX42XX7","30X5XXX42XX77","30X5XXX42XX771","","";"0","0X","0X5","0X5X","0X5XX","0X5XXX","0X5XXX4","0X5XXX42","0X5XXX42X","0X5XXX42XX","0X5XXX42XX7","0X5XXX42XX77","0X5XXX42XX771","","","";"X","X5","X5X","X5XX","X5XXX","X5XXX4","X5XXX42","X5XXX42X","X5XXX42XX","X5XXX42XX7","X5XXX42XX77","X5XXX42XX771","","","","";"5","5X","5XX","5XXX","5XXX4","5XXX42","5XXX42X","5XXX42XX","5XXX42XX7","5XXX42XX77","5XXX42XX771","","","","","";"X","XX","XXX","XXX4","XXX42","XXX42X","XXX42XX","XXX42XX7","XXX42XX77","XXX42XX771","","","","","","";"X","XX","XX4","XX42","XX42X","XX42XX","XX42XX7","XX42XX77","XX42XX771","","","","","","","";"X","X4","X42","X42X","X42XX","X42XX7","X42XX77","X42XX771","","","","","","","","";"4","42","42X","42XX","42XX7","42XX77","42XX771","","","","","","","","","";"2","2X","2XX","2XX7","2XX77","2XX771","","","","","","","","","","";"X","XX","XX7","XX77","XX771","","","","","","","","","","","";"X","X7","X77","X771","","","","","","","","","","","","";"7","77","771","","","","","","","","","","","","","";"7","71","","","","","","","","","","","","","","";"1","","","","","","","","","","","","","","",""}

注意,当参数num_chars指定为0或FALSE时,MID函数返回空字符串。

2. 现在,我们已经从单元格A1的字符串中生成了所有可能的子字符串,下面需要做的就是测试这些数据能否被3、5、7整除。

当然,首先要看哪些数值能被3整除,再看哪些数值能被5整除,最后看能被7整除的数值。(我们也要考虑公式的灵活性,即不仅适用于这里给出的3个数,还应适用于其他任意给出的数)

但是,现在我们想要同时测试是否能被这3个数的整除,而不是一个一个来。这意味着,对于刚才生成的16行16列的矩阵数组,我们想给MOD函数传递一个含有3个值(即3、5和7)的数组作为除数。

如果这256个数据都在单列(或单行),那么实现公式非常简单:

MOD(A1:A256,{3,5,7})

这将生成一个256行3列的数组,由每一行的数据除以3、5、7所得到的余数组成。

然而,这里我们将生成的两维数组和作为除数的一维数组传递给MOD函数时,将生成一个三维数组。太复杂了!因此,我们必须想办法将上面生成的数组转换成单列或单行数组。

这里,将传递含有256个值的数组到INDEX的每个参数,这些数组具有相同的“偏移”(即两个单列或两个单行),从而确保最终的数组是一维的。

传递给INDEX的数组中,参数row_num为:

N(IF(1,Arry3))

参数column_num为:

N(IF(1,Arry4))

(1)先看看定义的名称Arry3:

1+INT((Arry2)/LEN($A1))

它引用了名称Arry2:

ROW(INDIRECT("1:" & LEN($A1)^2))-1

转换为:

ROW(INDIRECT("1:" & 16^2))-1

转换为:

ROW(INDIRECT("1:" & 256))-1

结果为从0至255的值组成的数组:

{0;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31;32;33;34;35;36;37;38;39;40;41;42;43;44;45;46;47;48;49;50;51;52;53;54;55;56;57;58;59;60;61;62;63;64;65;66;67;68;69;70;71;72;73;74;75;76;77;78;79;80;81;82;83;84;85;86;87;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118;119;120;121;122;123;124;125;126;127;128;129;130;131;132;133;134;135;136;137;138;139;140;141;142;143;144;145;146;147;148;149;150;151;152;153;154;155;156;157;158;159;160;161;162;163;164;165;166;167;168;169;170;171;172;173;174;175;176;177;178;179;180;181;182;183;184;185;186;187;188;189;190;191;192;193;194;195;196;197;198;199;200;201;202;203;204;205;206;207;208;209;210;211;212;213;214;215;216;217;218;219;220;221;222;223;224;225;226;227;228;229;230;231;232;233;234;235;236;237;238;239;240;241;242;243;244;245;246;247;248;249;250;251;252;253;254;255}

因此,名称Arry3:

1+INT((Arry2)/LEN($A1))

转换为:

1+INT(({0;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31;32;33;34;35;36;37;38;39;40;41;42;43;44;45;46;47;48;49;50;51;52;53;54;55;56;57;58;59;60;61;62;63;64;65;66;67;68;69;70;71;72;73;74;75;76;77;78;79;80;81;82;83;84;85;86;87;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118;119;120;121;122;123;124;125;126;127;128;129;130;131;132;133;134;135;136;137;138;139;140;141;142;143;144;145;146;147;148;149;150;151;152;153;154;155;156;157;158;159;160;161;162;163;164;165;166;167;168;169;170;171;172;173;174;175;176;177;178;179;180;181;182;183;184;185;186;187;188;189;190;191;192;193;194;195;196;197;198;199;200;201;202;203;204;205;206;207;208;209;210;211;212;213;214;215;216;217;218;219;220;221;222;223;224;225;226;227;228;229;230;231;232;233;234;235;236;237;238;239;240;241;242;243;244;245;246;247;248;249;250;251;252;253;254;255})/16)

最后的结果为:

{1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;2;2;2;2;2;2;2;2;2;2;2;2;2;2;2;2;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;4;4;4;4;4;4;4;4;4;4;4;4;4;4;4;4;5;5;5;5;5;5;5;5;5;5;5;5;5;5;5;5;6;6;6;6;6;6;6;6;6;6;6;6;6;6;6;6;7;7;7;7;7;7;7;7;7;7;7;7;7;7;7;7;8;8;8;8;8;8;8;8;8;8;8;8;8;8;8;8;9;9;9;9;9;9;9;9;9;9;9;9;9;9;9;9;10;10;10;10;10;10;10;10;10;10;10;10;10;10;10;10;11;11;11;11;11;11;11;11;11;11;11;11;11;11;11;11;12;12;12;12;12;12;12;12;12;12;12;12;12;12;12;12;13;13;13;13;13;13;13;13;13;13;13;13;13;13;13;13;14;14;14;14;14;14;14;14;14;14;14;14;14;14;14;14;15;15;15;15;15;15;15;15;15;15;15;15;15;15;15;15;16;16;16;16;16;16;16;16;16;16;16;16;16;16;16;16}

该数组由16个1、16个2、16个3、…、16个16组成。

(2)再看看定义的名称Arry4:

1+MOD((Arry2),LEN($A1))

与前述类似,最终转换成:

{1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16}

与Arry3中的元素相同,但是排列顺序不同。

(3)将这两个数组作为行参数和列参数传递给INDEX函数,并使用在上文中得到的16行16列矩阵数组作为INDEX函数的第一个参数,等价于下面256个单独的INDEX公式:

INDEX(Our_Array,1,1)

INDEX(Our_Array,1,2)

INDEX(Our_Array,1,3)

INDEX(Our_Array,16,16)

INDEX函数将遍历16行16列矩阵中的每一行,并取出相应列中的数值。因为参数row_num和参数column_num所指定的数组都是单列数组,最后形成的结果也是一个单列数组。这样,就将前面得到的二维数组转换成了一维数组。

这样,公式中的:

INDEX(MID(A1,Arry1,IF(1+LEN(A1)-Arry1>=TRANSPOSE(Arry1),TRANSPOSE(Arry1))),N(IF(1,Arry3)),N(IF(1,Arry4)))

将16行16列的矩阵转换成为256行1列的矩阵:

{"X";"XX";"XX3";"XX30";"XX30X";"XX30X5";"XX30X5X";"XX30X5XX";"XX30X5XXX";"XX30X5XXX4";"XX30X5XXX42";"XX30X5XXX42X";"XX30X5XXX42XX";"XX30X5XXX42XX7";"XX30X5XXX42XX77";"XX30X5XXX42XX771";"X";"X3";"X30";"X30X";"X30X5";"X30X5X";"X30X5XX";"X30X5XXX";"X30X5XXX4";"X30X5XXX42";"X30X5XXX42X";"X30X5XXX42XX";"X30X5XXX42XX7";"X30X5XXX42XX77";"X30X5XXX42XX771";"";"3";"30";"30X";"30X5";"30X5X";"30X5XX";"30X5XXX";"30X5XXX4";"30X5XXX42";"30X5XXX42X";"30X5XXX42XX";"30X5XXX42XX7";"30X5XXX42XX77";"30X5XXX42XX771";"";"";"0";"0X";"0X5";"0X5X";"0X5XX";"0X5XXX";"0X5XXX4";"0X5XXX42";"0X5XXX42X";"0X5XXX42XX";"0X5XXX42XX7";"0X5XXX42XX77";"0X5XXX42XX771";"";"";"";"X";"X5";"X5X";"X5XX";"X5XXX";"X5XXX4";"X5XXX42";"X5XXX42X";"X5XXX42XX";"X5XXX42XX7";"X5XXX42XX77";"X5XXX42XX771";"";"";"";"";"5";"5X";"5XX";"5XXX";"5XXX4";"5XXX42";"5XXX42X";"5XXX42XX";"5XXX42XX7";"5XXX42XX77";"5XXX42XX771";"";"";"";"";"";"X";"XX";"XXX";"XXX4";"XXX42";"XXX42X";"XXX42XX";"XXX42XX7";"XXX42XX77";"XXX42XX771";"";"";"";"";"";"";"X";"XX";"XX4";"XX42";"XX42X";"XX42XX";"XX42XX7";"XX42XX77";"XX42XX771";"";"";"";"";"";"";"";"X";"X4";"X42";"X42X";"X42XX";"X42XX7";"X42XX77";"X42XX771";"";"";"";"";"";"";"";"";"4";"42";"42X";"42XX";"42XX7";"42XX77";"42XX771";"";"";"";"";"";"";"";"";"";"2";"2X";"2XX";"2XX7";"2XX77";"2XX771";"";"";"";"";"";"";"";"";"";"";"X";"XX";"XX7";"XX77";"XX771";"";"";"";"";"";"";"";"";"";"";"";"X";"X7";"X77";"X771";"";"";"";"";"";"";"";"";"";"";"";"";"7";"77";"771";"";"";"";"";"";"";"";"";"";"";"";"";"";"7";"71";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"1";"";"";"";"";"";"";"";"";"";"";"";"";"";"";""}

3. 有了上述基础后,现在知道,公式中的部分:

MOD(INDEX(MID(A1,Arry1,IF(1+LEN(A1)-Arry1>=TRANSPOSE(Arry1),TRANSPOSE(Arry1))),N(IF(1,Arry3)),N(IF(1,Arry4))),{3,5,7})

为一个256列1行的数组与一个1行3列的数组求余,即:

MOD({"X";"XX";"XX3";"XX30";"XX30X";"XX30X5";"XX30X5X";"XX30X5XX";"XX30X5XXX";"XX30X5XXX4";"XX30X5XXX42";"XX30X5XXX42X";"XX30X5XXX42XX";"XX30X5XXX42XX7";"XX30X5XXX42XX77";"XX30X5XXX42XX771";"X";"X3";"X30";"X30X";"X30X5";"X30X5X";"X30X5XX";"X30X5XXX";"X30X5XXX4";"X30X5XXX42";"X30X5XXX42X";"X30X5XXX42XX";"X30X5XXX42XX7";"X30X5XXX42XX77";"X30X5XXX42XX771";"";"3";"30";"30X";"30X5";"30X5X";"30X5XX";"30X5XXX";"30X5XXX4";"30X5XXX42";"30X5XXX42X";"30X5XXX42XX";"30X5XXX42XX7";"30X5XXX42XX77";"30X5XXX42XX771";"";"";"0";"0X";"0X5";"0X5X";"0X5XX";"0X5XXX";"0X5XXX4";"0X5XXX42";"0X5XXX42X";"0X5XXX42XX";"0X5XXX42XX7";"0X5XXX42XX77";"0X5XXX42XX771";"";"";"";"X";"X5";"X5X";"X5XX";"X5XXX";"X5XXX4";"X5XXX42";"X5XXX42X";"X5XXX42XX";"X5XXX42XX7";"X5XXX42XX77";"X5XXX42XX771";"";"";"";"";"5";"5X";"5XX";"5XXX";"5XXX4";"5XXX42";"5XXX42X";"5XXX42XX";"5XXX42XX7";"5XXX42XX77";"5XXX42XX771";"";"";"";"";"";"X";"XX";"XXX";"XXX4";"XXX42";"XXX42X";"XXX42XX";"XXX42XX7";"XXX42XX77";"XXX42XX771";"";"";"";"";"";"";"X";"XX";"XX4";"XX42";"XX42X";"XX42XX";"XX42XX7";"XX42XX77";"XX42XX771";"";"";"";"";"";"";"";"X";"X4";"X42";"X42X";"X42XX";"X42XX7";"X42XX77";"X42XX771";"";"";"";"";"";"";"";"";"4";"42";"42X";"42XX";"42XX7";"42XX77";"42XX771";"";"";"";"";"";"";"";"";"";"2";"2X";"2XX";"2XX7";"2XX77";"2XX771";"";"";"";"";"";"";"";"";"";"";"X";"XX";"XX7";"XX77";"XX771";"";"";"";"";"";"";"";"";"";"";"";"X";"X7";"X77";"X771";"";"";"";"";"";"";"";"";"";"";"";"";"7";"77";"771";"";"";"";"";"";"";"";"";"";"";"";"";"";"7";"71";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"1";"";"";"";"";"";"";"";"";"";"";"";"";"";"";""},{3,5,7})

得到一个由求余后的结果组成的256行3列的数组:

{#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;0,3,3;0,0,2;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;0,0,0;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;2,0,5;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;1,4,4;0,2,0;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;2,2,2;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;1,2,0;2,2,0;0,1,1;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!1,2,0;2,1,1;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;1,1,1;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!;#VALUE!,#VALUE!,#VALUE!}

在数组中,0值表示该处的值能够被3、5或7整除。

4. 将上述数组与0进行比较:

MOD(INDEX(MID(A1,Arry1,IF(1+LEN(A1)-Arry1>=TRANSPOSE(Arry1),TRANSPOSE(Arry1))),N(IF(1,Arry3)),N(IF(1,Arry4))),{3,5,7})=0

得到一组#VALUE!值和TRUE/FALSE值组成的数组。然后将所得到的数组与0相加:

0+(MOD(INDEX(MID(A1,Arry1,IF(1+LEN(A1)-Arry1>=TRANSPOSE(Arry1),TRANSPOSE(Arry1))),N(IF(1,Arry3)),N(IF(1,Arry4))),{3,5,7})=0)

强制将TRUE/FALSE值转换成1/0,得到一组#VALUE!值和1/0值组成的数组。将该数组传递给IFERROR函数:

IFERROR(0+(MOD(INDEX(MID(A1,Arry1,IF(1+LEN(A1)-Arry1>=TRANSPOSE(Arry1),TRANSPOSE(Arry1))),N(IF(1,Arry3)),N(IF(1,Arry4))),{3,5,7})=0),0)

将错误值#VALUE!转换成0,得到一组由0、1组成的256行3列的数组(其中1代表原256行的数组中该处数值能够被3、5或7整除):

{0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;1,0,0;1,1,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;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,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,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,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;1,0,1;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,1;0,0,1;1,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;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;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0}

上述数组传递给MMULT函数:

MMULT(IFERROR(0+(MOD(INDEX(MID(A1,Arry1,IF(1+LEN(A1)-Arry1>=TRANSPOSE(Arry1),TRANSPOSE(Arry1))),N(IF(1,Arry3)),N(IF(1,Arry4))),{3,5,7})=0),0),{1;1;1})

转换为:

MMULT({0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;1,0,0;1,1,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;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,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,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,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;1,0,1;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,1;0,0,1;1,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;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;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0},{1;1;1})

一个256行3列的数组与一个3行1列数组相乘,得到一个256行1列的数组:

{0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0}

也就是256行3列数组中每行可以被3、5、7整除的结果组成的数组,即1代表该行中可以被3、5、7中的某个数整除,2代表该行中可以被3、5、7中的某两个数整除,3代表该行中可以被3、5、7中的三个数整除。将得到的数组与0相比较:

(MMULT(IFERROR(0+(MOD(INDEX(MID(A1,Arry1,IF(1+LEN(A1)-Arry1>=TRANSPOSE(Arry1),TRANSPOSE(Arry1))),N(IF(1,Arry3)),N(IF(1,Arry4))),{3,5,7})=0),0),{1;1;1})>0)

得到一个由TRUE/FALSE值组成的数组,其中TRUE值表示可以被3、5或7整除,将得到的数组与0相加,将TRUE/FALSE强制转换成1/0,然后传递给SUM函数求和,得到值9,也就是该字符串中分拆出的能够被3、5或7整除的数的个数。

小结:尽管这个案例似乎没有多少实用性,但在解决问题的过程中使用的处理字符串的技术是非常值得学习和借鉴的。

1.将字符串拆分成所有可能组合的技术。

2.将二维数组转换成一维数组的技术。

3.使用数组乘法统计数值的技术。

包含数字和指定字符的正则表达式_Excel公式练习39: 求字符串中的数字组成的数能够被指定数整除的数的个数...相关推荐

  1. 正则表达式匹配字符串中以数字结尾的字符

    正则表达式匹配字符串中以数字结尾的字符 <li class="xxx"><a href="http://www.xxx.net/abc90.htm&qu ...

  2. python正则表达式提取数字比较好_python正则表达式从字符串中提取数字的思路详解...

    python从字符串中提取数字 使用正则表达式,用法如下: ## 总结 ## ^ 匹配字符串的开始. ## $ 匹配字符串的结尾. ## \b 匹配一个单词的边界. ## \d 匹配任意数字. ## ...

  3. excel取末尾数字_Excel公式技巧11: 从字符串中提取数字——数字位于字符串末尾...

    excelperfect 上篇文章讲解了提取位于字符串开头的数字的公式技术,本文研究从字符串开头提取数字的技术: 1. 这些数字是连续的 2. 这些连续的数字位于字符串的末尾 3. 想要的结果是将这些 ...

  4. 【转】SQL函数:字符串中提取数字,英文,中文,过滤重复字符

    SQL函数:字符串中提取数字,英文,中文,过滤重复字符 --提取数字 IF OBJECT_ID('DBO.GET_NUMBER') IS NOT NULL DROP FUNCTION DBO.GET_ ...

  5. ACMNO.40 C语言-子串 有一字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串

    题目描述 有一字符串,包含n个字符. 写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串. 输入 数字n 一行字符串 数字m 输出 从m开始的子串 样例输入 6 abcdef 3 样 ...

  6. python正则匹配字符串中的数字_Python正则表达式匹配字符串中的数字

    1.使用"\d+"匹配全数字 代码: import re zen = "Arizona 479, 501, 870. Carlifornia 209, 213, 650. ...

  7. python正则匹配11个数字_Python正则表达式匹配字符串中的数字

    导读 这篇文章主要介绍了Python正则表达式匹配字符串中的数字,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 1.使用"\d+"匹配全数字 ...

  8. python正则表达式匹配字符串中的电话号码_Python正则表达式匹配字符串中的数字...

    这篇文章主要介绍了Python正则表达式匹配字符串中的数字,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 1.使用"\d+"匹配全数字 代码: ...

  9. Python正则表达式匹配字符串中的数字

    导读 这篇文章主要介绍了Python正则表达式匹配字符串中的数字,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 1.使用"\d+"匹配全数字 ...

最新文章

  1. win7+iis7.5下的asp.net网站发布系列问题
  2. SEO日暮途穷?做好几点实现华丽蜕变
  3. Career Essentials Postgraduate Study: exploring your options 读完本科后干啥?
  4. Asp.Net Ajax的两种基本开发模式
  5. qt5变成内部头文件 ubuntu_Ubuntu下Visual Studio Code软件的安装和使用
  6. 贪心+单调栈——去除重复字母(Leetcode 316)
  7. 高一计算机应用选择题,职业中学 高一《计算机应用基础》期末考试题
  8. matlab条形图颜色矩阵,matlab中的条形图开关颜色
  9. 【Java基础】RTTI与反射之Java
  10. 无法解析 org.apache.commons:commons-pool2:2.4.2
  11. script标签的使用,从零开始
  12. vue-cli初始化一个项目
  13. arcmap拓扑错误检查器不亮_ARCGIS拓扑检查步骤与修正拓扑错误技巧
  14. 侏罗纪开发实施工作管理平台
  15. VC静态库开发与使用
  16. mistake for/mix up/narrow down等动词词组
  17. 大数据服务模型设计:默默无闻的贤内助
  18. no moudle named sklearn-impute
  19. 信息安全系统所需要遵循的基本原则有哪些?
  20. IntelliJ IDEA 如何创建一个 Java 项目

热门文章

  1. Auto Lisp 标注子样式_FAIR 开放大规模细粒度词汇级标记数据集 LVIS,连披萨里的菠萝粒都能完整标注...
  2. 静态资源java 配置文件_java web 静态资源访问配置三种方式
  3. mysql timestamp 类型_MySQL中“诡异”的TIMESTAMP数据类型
  4. 从0搭建一个Springboot+vue前后端分离项目(一)安装工具,创建项目
  5. Java oracle查询语句无法赋值给_java.sql.SQLException: 无法转换为内部表示 -〉java 查询oracle数据库返回错误信息...
  6. java编程button_以编程方式在Java Swing中单击GUIbutton
  7. 图像二值化之最大类间方差法(大津法,OTSU)
  8. 使用tensorflow书写逻辑回归
  9. ValueError: This model has not yet been built. Build the model first by calling build() or calling f
  10. 第二大数 滑动窗口 第九届“图灵杯”NEUQ-ACM程序设计竞赛个人赛