当前所在位置: 首页 > 儿童教育 > 正文

excel公式教程:找到和的加数

2023-01-26 餐饮美食网 【 字体:

有时候,我们给出一个目标值,想要知道这个值是已经提供的一系列值中哪几个值的和。如下图1所示,在单元格A2中给出了目标值47,在单元格C1:K1中有9个值,现在我们想知道这些值中哪些值相加等于47,在这些值的下方单元格中使用“X”标记。

图1

在单元格C2中输入公式,然后拖放至单元格K2,得到结果。

那么,如何编写这个公式呢?

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

公式

在单元格C2中输入数组公式:

=IF(ISNUMBER(MATCH(COLUMNS($C:C),IF(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),),TRANSPOSE(Arry1)),0)),”X”,””)

向右拖拉至单元格K2为止。

结果如下图2所示。

图2

公式解析

公式中的Data、Arry1和Arry2是定义的三个名称。

名称:Data

引用位置:=$C$1:$K$1

名称:Arry1

引用位置:=ROW(INDIRECT(“1:” &COLUMNS(Data)))

名称:Arry2

引用位置:=ROW(INDIRECT(“1:” &2^COLUMNS(Data)))

我们来看看这两个公式定义的名称是怎样运转的。名称:Arry1

=ROW(INDIRECT(“1:”& COLUMNS(Data)))

转换为:

=ROW(INDIRECT(“1:” & 9))

得到的结果为:

={1;2;3;4;5;6;7;8;9}

名称:Arry2

=ROW(INDIRECT(“1:”& 2^COLUMNS(Data)))

转换为:

=ROW(INDIRECT(“1:” & 2^9))

转换为:

=ROW(INDIRECT(“1:” & 512))

得到的结果为:

={1;2;3;……;510;511;512}

再来看看公式中相同的两个部分:

MOD(INT((Arry2-1)/2^(TRANSPOSE(Arry1)-1)),2)

转换为:

MOD(INT(({1;2;3;……;510;511;512}-1)/2^(TRANSPOSE({1;2;3;4;5;6;7;8;9})-1)),2)

转换为:

MOD(INT(({0;1;2;……;509;510;511})/2^({0,1,2,3;4,5,6,7,8}),2)

转换为:

MOD(INT({0;1;2;……;509;510;511}/{1,2,4,8,16,32,64,128,256}),2)

两个数组相除,一个是512行1列的数组,一个是1行9列的数组,得到一个512行9列的矩阵:

MOD(INT({0,0,0,0,0,0,0,0,0;1,0.5,0.25,0.125,0.0625,0.03125,0.015625,0.0078125,0.00390625;2,1,0.5,0.25,0.125,0.0625,0.03125,0.015625,0.0078125;3,1.5,0.75,0.375,0.1875,0.09375,0.046875,0.0234375,0.01171875;……;509,254.5,127.25,63.625,31.8125,15.90625,7.953125,3.9765625,1.98828125;510,255,127.5,63.75,31.875,15.9375,7.96875,3.984375,1.9921875;511,255.5,127.75,63.875,31.9375,15.96875,7.984375,3.9921875,1.99609375}),2)

对矩阵元素取整,结果为:

MOD({0,0,0,0,0,0,0,0,0;1,0,0,0,0,0,0,0,0;2,1,0,0,0,0,0,0,0;3,1,0,0,0,0,0,0,0;……;509,254,127,63,31,15,7,3,1;510,255,127,63,31,15,7,3,1;511,255,127,63,31,15,7,3,1},2)

对矩阵元素求余,结果为:

{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}

这是9个0或1的所有可能组合组成的数组矩阵。

公式中:

TRANSPOSE(Data)

的结果为:

TRANSPOSE({10,14,20,2,12,5,1,17,3})

转置后得到:

{10;14;20;2;12;5;1;17;3}

这样,公式中:

MMULT(MOD(INT((Arry2-1)/2^(TRANSPOSE(Arry1)-1)),2),TRANSPOSE(Data))

的结果就是上面得到的两个数组(一个是512行9列的大数组矩阵,另一个是9行1列的数组)的乘积,得到一个512行1列的数组:

{0;10;14;24;20;30;34;44;2;12;16;26;…;50;54;64;60;70;74;84}

这个数组由C1:K1中的9个值按各种组合相加所得到的和组成。

然后,将这个数组与目标值进行比较:

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.如果不存在和等于目标值的数值组合,则所有标记单元格为空。

3.如果有多个数值组合等于目标值,则只标记其中一种组合。

阅读全文
相关推荐

如何自制蛋挞

如何自制蛋挞
1、倒入低筋面、黄油和水,揉成面团状,藏一小时后取出,抹上黄油卷起,包上保鲜膜冷藏半小时。2、取出,将面团切成一厘米的面团,放入模具内,用力按压,中间稍薄,外缘要比模具高,将蛋挞液倒入蛋挞皮中,放入烤箱里烤30分钟即可。

肉火烧面怎么和面

肉火烧面怎么和面
1、首先用温水把酵母融开,加入面粉,用手把面粉揉成非常软的面团,可以放一点熬好的猪油在面团里面。2、然后放在温暖的地方,盖上保鲜膜发酵至2倍大,发好的面团用手插入不回缩,就说明面团发酵好了。

奶茶几分糖好喝

奶茶几分糖好喝
1、不同的人对奶茶的口感要求是不一样的,一般来说,奶茶有三分糖、五分糖、七分糖三种不同的口味。2、女生一般都喜欢喝甜一点的,而男生则喜欢喝不那么甜的,七分糖的奶茶最好喝。

过桥米线是哪里的?

过桥米线是哪里的?
过桥米线是来自云南省滇南地区的一种有名特色小吃。过桥米线最早是在清朝就已经出现,距离现在至少有一百多年的历史啦!起源于建水县东城外锁龙桥西侧的鸡市街头处,有建水的特产草芽、地椒作配料,风味独特而远近闻名。深受广大美食爱好者的喜欢,不少人为此专门长途跋涉,只为尝

面霜和乳液的区别

面霜和乳液的区别
面霜和乳液的区别,相较而言乳液的水分含量要比面霜高,乳液质地要轻薄一些,乳液主要作用是保湿,滋润可以隔离外界干燥的气候,面霜既可保湿,又可美白,还能抗衰老,乳液的吸收快一些,而面霜吸收比较慢一些,因为液体的吸收速度都比较快。

怎么摘隐形眼镜

怎么摘隐形眼镜
在摘隐形眼镜之前,先用洗手液将手清洗干净,以免将细菌带入眼睛内,对着镜子,用右手中指轻拉眼睛下眼睑,左手中指轻拉眼睛上眼睑,让黑色眼球暴露在空气中,用右手食指和拇指轻触镜片的两边缘部分,向中间推使镜片拱起,再用两手指轻轻捏出镜片即可。

粉饼和散粉的区别

粉饼和散粉的区别
粉饼是呈压缩固体状态,多呈圆形或者方形,散粉则是细腻的粉末状,粉饼遮瑕力会比较强一些,可以湿用做粉底,或者用来补妆,而散粉则是定妆的效果,粉饼通常用在底妆的第一步,而散粉通常用在底妆最后一步。

冷烫和热烫的区别

冷烫和热烫的区别
冷烫和热烫的区别:冷烫对头发的要求是要在保温状态下才能给卷有个好的效果,而热烫是在干和湿的情况下都行,热烫烫出来的头发比较自然明显而有弹力,冷烫的头发风干后基本看不出来,并且发质会有点干。

高品质香水如何鉴别?用三步就可以解决

高品质香水如何鉴别?用三步就可以解决
1、看色泽以天然香料调制而成的高级香水,都有它本来的颜色,且大都是琥珀色或褐色,看起来很像宝石,比如,从茉莉、玫瑰或水仙等天然鲜花中所萃取的精油都呈黄色、褐白或绿褐色;此外,香水中所添加的魅惑香气物性香料也是褐色,苔类中的橡树苔是绿色,从树根或树根脂类中萃取的

如何去除黑眼圈

如何去除黑眼圈
去除黑眼圈首先可以用热毛巾敷眼,然后再用冷毛巾敷,十分钟就能让黑眼圈淡化的不那么严重,其次将去壳后的鸡蛋用无菌纱布包裹住,敷于眼部轻轻转动,可以急救去除黑眼圈,另外抹完眼霜后,用双手顺时针按摩,可以促进血液循环消除黑眼圈。
本文Tag