MMULT(MOD(INT((Arry2-1)/2^(TRANSPOSE(Arry1)-1)),2),TRANSPOSE(Data))=$A$2
即:
{0;10;14;24;20;30;34;44;2;12;16;26;…;50;54;64;60;70;74;84}=47
比较后得到:
{FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;…;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE}
传递给MATCH函数:
MATCH(TRUE,MMULT(MOD(INT((Arry2-1)/2^(TRANSPOSE(Arry1)-1)),2),TRANSPOSE(Data))=$A$2,0)
即:
MATCH(TRUE, {FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;…;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE},0)
得到的结果为等于目标值的数据在数组中的位置,本例中为:54 。
根据上面公式解析的结果,此时公式中的:
INDEX(MOD(INT((Arry2-1)/2^(TRANSPOSE(Arry1)-1)),2),MATCH(TRUE,MMULT(MOD(INT((Arry2-1)/2^(TRANSPOSE(Arry1)-1)),2),TRANSPOSE(Data))=$A$2,0),)
变换过程为:
INDEX({0,0,0,0,0,0,0,0,0;
1,0,0,0,0,0,0,0,0;
0,1,0,0,0,0,0,0,0;
1,1,0,0,0,0,0,0,0;
……
1,0,1,1,1,1,1,1,1;
0,1,1,1,1,1,1,1,1;
1,1,1,1,1,1,1,1,1},54,)
由于INDEX函数忽略了列参数,因此返回矩阵数组中的第54行,即:
{1,0,1,0,1,1,0,0,0}
可以看到,数组中的1对应着要得到目标值找出的加数,现在要将他们标识出来 。
此时单元格C2中的公式变为:
=IF(ISNUMBER(MATCH(1,IF({1,0,1,0,1,1,0,0,0},TRANSPOSE(Arr1)),0)),”X”,””)
转换为:
=IF(ISNUMBER(MATCH(1,IF({1,0,1,0,1,1,0,0,0},{1,2,3,4,5,6,7,8,9}),0)),”X”,””)
转换为:
=IF(ISNUMBER(MATCH(1,{1,FALSE,3,FALSE,5,6,FALSE,FALSE,FALSE},0)),”X”,””)
得到:
=IF(ISNUMBER(1),”X”,””)
结果为:
X
即在单元格C2中输入“X”,表明其上方单元格C1为一个加数 。
将公式向右拖放 。在单元格D2中:
=IF(ISNUMBER(MATCH(2,{1,FALSE,3,FALSE,5,6,FALSE,FALSE,FALSE},0)),”X”,””)
得到:
=IF(ISNUMBER(#N/A),”X”,””)
转换为:
=IF(FLASE,”X”,””)
结果为空 。
在单元格E2中:
=IF(ISNUMBER(MATCH(3,{1,FALSE,3,FALSE,5,6,FALSE,FALSE,FALSE},0)),”X”,””)
得到:
=IF(ISNUMBER(3),”X”,””)
结果为:
X
即在单元格E2中输入“X”,表明其上方单元格E1为一个加数 。
……
依此类推 。
哇塞!
注意:
1.这里的解决方案理论上限制在20个数值 。值越多,计算量越大,对电脑资源需求量也越大 。
2.如果不存在和等于目标值的数值组合,则所有标记单元格为空 。
【excel公式教程:找到和的加数】3.如果有多个数值组合等于目标值,则只标记其中一种组合 。
推荐阅读
- excel公式教程:拆分连字符分隔的数字并放置在同一列中
- Excel下拉菜单的三种做法
- Excel表格INDIRECT函数的妙用
- SUMPRODUCT分组排名公式
- 多关键字 怎么用公式实现根据多个条件排名次
- Excel 多工作表合并
- excel只需鼠标按序点下去,即可多工作合并
- 如果你被excel合并单元格困扰过,收藏此篇!
- excel表格技巧:神奇的隔行隔列复制
- excel图表怎么将已有编号批量转为自动编号