请考虑以下数据(假设所有数据都在第1行中):
A B C D E F G
20 7 3 4 3 8 7
我想做的是从A1中减去第1行中的值,从最右边的值(G1)到左边(在B1中结束)开始。一旦该值将产生负结果,我希望它停止从那里扣除。在给定的示例中,公式应具有如下逐步方法:
A1-G1 (20-7) = 13
A1-G1-F1 (13-8) = 5
A1-G1-F1-E1 (5-3) = 2
A1-G1-F1-E1-D1 (2-4) = -2
在第三步中,一旦它检测到减去第四个值(D1)将得出负值,它将停止从那里扣除,并且公式的结果应为2。
我为此做了两件事:
我使用具有以下模式的长多重IF语句:
=A1-IF(A1-G1<0,0,G1)-IF(A1-G1-F1<0,0,F1)....
我在B2单元格中使用了一个辅助列,并在G2中输入了以下公式并拖动到右侧:
=IF(A1-SUM(B1:$G$1)<0,0,A1-SUM(B1:$G$1))
此后,我只使用了MIN()
函数来获得所需的值。
现在,问题在于我必须对几百到几千行执行此操作,并且将在所有行的最右边的单元格上继续添加值。我想做的是将专用于我的原始数据的帮助表链接起来,并使用第二个选项获得最小值。我可以通过使用SUM()
,COUNTIF
,ADDRESS
和SUBSTITUTE
方法在INDIRECT
函数中链接列字母,我相信它们会很好地工作。我只是想知道我是否可以避免所有这些工作,而是使用一个公式来满足我的要求。谢谢!
答案 0 :(得分:1)
我可以看到一个偏移量解决方案,您首先从第一个数字(20)中减去数字(32)的总和,得到一个负数(-12),然后开始添加数字7、7 + 3 ,7 + 3 + 4…直到得到正数(+2)。看起来像这样(作为数组公式输入):
=INDEX((A1-SUM(B1:G1)+SUBTOTAL(9,OFFSET(A1,0,1,1,COLUMN(B1:G1)-1))),
MATCH(TRUE,(A1-SUM(B1:G1)+SUBTOTAL(9,OFFSET(A1,0,1,1,COLUMN(B1:G1)-1)))>0,0))
答案 1 :(得分:0)
输入为数组公式( ctrl + shift + enter ):
=MIN(IFERROR(SQRT(A1-MMULT(IF(COLUMN(B1:G1)>=TRANSPOSE(COLUMN(B1:G1)),B1:G1,0),--(TRANSPOSE(COLUMN(B1:G1))>0))),A1))^2