=LARGE(IF(SUMIF(OFFSET($Q3,,,,COLUMN(A1:G1)),"<>") 该函数放在X3,数组公式,粘贴后按ctrl+shift+enter确认,可下拉。得出的是个数值,即题目所说后续X个月需求。 (对函数比较熟悉的看这里) 简单思路就是COLUMN求出元素数量相符的数组,offset函数求出各月累积的相应区域,sumif对之前区域求和得出各月累积,IF对小于结余的赋值为其序数,LAGER求出最后满足需求的序数。 (然后这里想详细写一下,对数组计算不熟悉的看这里,对具体函数不熟悉的百度) 1、column是获取行号的函数,COLUMN(A1:G1)即获取A1、B1、、、G1的行号,得出数组{1;2;3;4;5;6;7} 2、offset是设置单元格的偏移量获得新单元格或区域的函数,具体百度。如问题中以$Q3即六月需求做原单元格,OFFSET($Q3,,,,1)=Q3,OFFSET($Q$3,,,,2)=Q3:R3,OFFSET($Q$3,,,,3)=Q3:S3,可以发现Q3为6月的需求,Q3:R3的和为到7月的累积需求,Q3:S3的和为到8月的累积需求的规律 3、所以两个函数结合OFFSET($Q3,,,,COLUMN(A1:G1)),即OFFSET($Q3,,,,{1;2;3;4;5;6;7})。就得出了一个7个元素组成的数组,分别代表6、7、8……12月的需求累积和,但至此他们还只是区域,还没进行求和,但是理解到这一步就基本成功了。 (如果你需要测算未来8个月,则使用COLUMN(A1:H1)={1;2;3;4;5;6;7;8},以此类推) 4、然后求和,因为是数组公式,我们用sumif对数组内各区域求和,判断式使用 "<>" 即可。求和后我们真正得到了6、7、8……12月的需求累积和,分别对应数组的第1、2、3……7个数。 5、如上图,我们已经求出了未来7个月的累积需求量,接下来就可以判断这些需求量哪些小于结余量,如上图用IF函数判断,这些数组中哪些小于当项结余量P3,结果为真时,赋值为COLUMN(A1:G1),刚刚说过COLUMN(A1:G1)=={1;2;3;4;5;6;7},为什么要这样赋值?我们求的并不是最大可满足月份的累积需求,而且是求出它是之后的第几个月,而对应的{1;2;3;4;5;6;7}正好满足我们的需求。如果累积需求小于结余,我们直接将之变成我们要求的第几月,而大于结余的累积月,赋值为空值 “”,避免影响后面结果。我们会得到如下图的结果,4083仅能满足到7月份的累积需求,所以6、7月累积需求分别赋值为它们的序数,后面的月份则变成空值。 6、最后用lager函数,选出数组中最大的一个数,及满足累积需求比结余小,又是最靠后那个月份,最后的参数“1”,代表选第几大的数。 最后求出结果。 7、现在把那剩余两组数据的函数都填上去,故意改大最后一个结余,显示函数可靠性,下拉函数都能求出结果。 记得,粘贴后按ctrl+shift+enter确认