Excel - 用于查找N

时间:2017-05-01 10:56:41

标签: excel excel-formula

我想知道总和N需要多少个单元格。请参阅以下示例:

number | cells to sum of 100
  100   | 1
  50    | 2
  20    | 3
  25    | 4
  15    | 4
  90    | 2
  10    | 2

参见最后一列,它找到当前单元格+前一单元格的最小数量,总和为100。

有办法吗?

感谢。

3 个答案:

答案 0 :(得分:2)

B2数组公式**

=IFERROR(1+ROWS(A$2:A2)-MATCH(100,MMULT(TRANSPOSE(A$2:A2),0+(ROW(A$2:A2)>=TRANSPOSE(ROW(A$2:A2)))),-1),"Not Possible")

根据需要复制。

根据需要更改硬编码阈值(此处为100)。

作为对部分的解释:

MMULT(TRANSPOSE(A$2:A2),0+(ROW(A$2:A2)>=TRANSPOSE(ROW(A$2:A2))))

使用提供的数据并从B5获取上述版本,即:

MMULT(TRANSPOSE(A$2:A5),0+(ROW(A$2:A5)>=TRANSPOSE(ROW(A$2:A5))))

第一部分,即:

TRANSPOSE(A$2:A5)

返回:

{100,50,20,25}

及其第二部分,即:

0+(ROW(A$2:A5)>=TRANSPOSE(ROW(A$2:A5)))

解析为:

0+({2;3;4;5}>=TRANSPOSE({2;3;4;5}))

即:

0+({2;3;4;5}>={2,3,4,5})

是:

0+{TRUE,FALSE,FALSE,FALSE;TRUE,TRUE,FALSE,FALSE;TRUE,TRUE,TRUE,FALSE;TRUE,TRUE,TRUE,TRUE})

是:

{1,0,0,0;1,1,0,0;1,1,1,0;1,1,1,1}

对矩阵乘法的理解将告诉我们:

MMULT(TRANSPOSE(A$2:A5),0+(ROW(A$2:A5)>=TRANSPOSE(ROW(A$2:A5))))

在这里:

MMULT({100,50,20,25},{1,0,0,0;1,1,0,0;1,1,1,0;1,1,1,1})

是:

{195,95,45,25}

即。一个数组,其四个元素分别相当于:

=SUM(A2:A5) =SUM(A3:A5) =SUM(A4:A5) =SUM(A5:A5)

此致

**数组公式的输入方式与“标准”公式的输入方式不同。您只需按住CTRL和SHIFT键,然后按ENTER键,而不是按ENTER键。如果你已经正确地完成了它,你会注意到Excel在公式周围放置了大括号{}(虽然不要尝试自己手动插入这些)。

答案 1 :(得分:0)

我用excel公式做了前3个: D3→100 C4是您的号码开始的地方,因此C4 = 100,C5 = 50等。 公式在D4,D5,D6等上

在D4上:

  

= IF(C4&GT = D3; 1;"假&#34)

在D5上:

  

= IF(C5&GT = D3; 1; IF(C5 + C4&GT = D3; 2;"错误&#34))

在D6上:

  

= IF(C6&GT = D3; 1; IF(C6 + C5&GT = D3; 2; IF(C6 + C5 + C4&GT = D4; 3;"错误")))

你可以继续这样做,只需继续替换"错误"具有更长/更新版本的IF(C6 + C5 + C4> = D4; 3.

我不知道这是否是最佳方式,但这将实现它。

答案 2 :(得分:0)

解决此问题的一种方法是创建一个NxN方程矩阵而不是一列。提供了示例图片。 E到I列是隐藏的。右边的最后一列确定了所需的数量

Solution

理论上,如果获得100所需的行数是已知的小数,您也可以对方程进行硬编码。例如,如果行数始终为4或更少,则C8将为=IFS(B8>=100,1,SUM(B7:B8)>=100,2,SUM(B6:B8)>=100,3,SUM(B5:B8)>=100,4)。顺便说一下,你会在第一,第二和第三行遇到这个等式的和边界问题。因此,第一行必须为=if(B8>=100,1,""),第二行为=IFS(B9>=100,1,SUM(B8:B9)>100,2,TRUE,""),依此类推。