累计D列热量单位至达标,返回对应A列日期至目标列
解决累计热量达标日期的查找问题
嘿,我完全get到你的需求了——从事件日期的第二天开始累计D列的热量单位,找到第一个累计值达到目标(比如E1的40)的日期,填到对应的E列单元格里对吧?虽然你目前只熟悉VLOOKUP,但用INDEX+MATCH的组合完全能搞定,我一步步给你讲明白:
核心公式(适用于大多数Excel版本)
以你示例里的E4(对应事件日期A4)为例,输入这个公式(旧版Excel需要按Ctrl+Shift+Enter作为数组公式输入,365/2021版本直接回车就行):
=INDEX(A:A, MATCH(TRUE, SUBTOTAL(9, OFFSET(D5,0,0,ROW(D:D)-ROW(D4),1))>=E$1, 0)+ROW(D4))
公式拆解(帮你理解每个部分)
OFFSET(D5,0,0,ROW(D:D)-ROW(D4),1):这部分是生成动态累计区域——从D5(事件次日的热量单位)开始,随着公式向下计算,自动扩展区域范围(比如算到D7时,区域就是D5:D7)。SUBTOTAL(9,...):用9代表求和,计算上面那个动态区域的累计热量值。MATCH(TRUE, ...>=E$1, 0):找到第一个累计值≥目标值(E1的40)的位置,返回的是相对于D5的偏移次数(比如D7是第3个,就返回3)。INDEX(A:A, ...+ROW(D4)):把偏移次数加上事件行的行号(D4的行号是4),得到达标日期所在的行,最后从A列取出对应的日期。
扩展到F4、G4
要计算其他目标列(比如F列、G列),只需要把公式里的E$1改成对应的目标单元格就行,比如F4的公式把E$1换成F$1,G4换成G$1,其他部分不用改。
Excel 365/2021简化版公式
如果你用的是新版Excel,用SCAN函数能更直观地实现累计,公式更简洁:
=INDEX(A:A, ROW(D4)+XMATCH(TRUE, SCAN(0, D5:D100, LAMBDA(a,b,a+b))>=E$1, 1))
这里SCAN(0, D5:D100, LAMBDA(a,b,a+b))会从0开始,逐个累加D5到D100的数值,生成累计序列,然后XMATCH找到第一个≥目标值的位置,加上事件行号就是达标日期的行号。
小提示
- 如果累计永远达不到目标值,公式会返回
#N/A,可以用IFERROR处理成友好提示:=IFERROR(上面的公式, "未达标") - 确保D列的热量单位都是纯数值,不要混有文本,否则累计会出错
- 公式里的
E$1用了绝对引用($固定行号),这样下拉公式时目标值不会跟着变,适合批量处理多行事件
内容的提问来源于stack exchange,提问作者scyntar
相关产品推荐
相关产品推荐

