Excel公式求助:提取区域内第n个已产生现金流的里程碑
Excel 有效里程碑提取公式方案
核心需求
从Cash-inflows表的B29:B58区域,提取对应现金流总和不为0的里程碑,公式可向下复制,自动依次提取第1、2、3...个有效项,无需手动调整参数。
方案1:基于已有的辅助列(B列)
如果已在Cash-inflows表的B列设置规则(仅当现金流总和不为0时显示里程碑,否则为空),直接用以下公式:
Excel 365/2021(支持动态数组,可直接下拉复制)
=IFERROR(INDEX('Cash-inflows'!$B$29:$B$58, SMALL(IF('Cash-inflows'!$B$29:$B$58<>"", ROW('Cash-inflows'!$B$29:$B$58)-ROW('Cash-inflows'!$B$29)+1), ROW(A1))), "")
- 操作:在概览表第一个单元格输入公式,下拉即可自动提取后续有效里程碑,无数据时返回空值。
旧版Excel(2019及更早,需按Ctrl+Shift+Enter触发数组公式)
=IFERROR(INDEX('Cash-inflows'!$B$29:$B$58, SMALL(IF('Cash-inflows'!$B$29:$B$58<>"", ROW('Cash-inflows'!$B$29:$B$58)-ROW('Cash-inflows'!$B$29)+1), ROW(A1))), "")
- 操作:输入公式后按住
Ctrl+Shift+Enter完成输入,再下拉复制。
方案2:直接基于现金流数据(无需辅助列)
如果不想依赖辅助列,直接通过判断每行现金流总和是否不为0提取里程碑(假设现金流数据在Cash-inflows表的C29:FE58区域):
Excel 365/2021(推荐,支持动态溢出)
一次性溢出所有有效里程碑(无需下拉)
=FILTER('Cash-inflows'!B29:B58, BYROW('Cash-inflows'!C29:FE58, LAMBDA(row, SUM(row))>0))
- 操作:在概览表第一个单元格输入公式,Excel会自动溢出所有符合条件的里程碑。
可下拉复制的公式
=IFERROR(INDEX('Cash-inflows'!B29:B58, SMALL(IF(BYROW('Cash-inflows'!C29:FE58, LAMBDA(row, SUM(row))>0), ROW('Cash-inflows'!B29:B58)-ROW('Cash-inflows'!B29)+1), ROW(A1))), "")
- 操作:输入后下拉复制,自动提取第n个有效里程碑。
旧版Excel(2019及更早,数组公式)
=IFERROR(INDEX('Cash-inflows'!$B$29:$B$58, SMALL(IF(MMULT(--('Cash-inflows'!$C$29:$FE$58<>""), TRANSPOSE(COLUMN('Cash-inflows'!$C$29:$FE$58)^0))>0, ROW('Cash-inflows'!$B$29:$B$58)-ROW('Cash-inflows'!$B$29)+1), ROW(A1))), "")
- 操作:输入后按
Ctrl+Shift+Enter触发数组公式,再下拉复制。
公式逻辑说明
INDEX:从指定的里程碑区域提取对应位置的内容SMALL:返回符合条件的行号中的第n小值(ROW(A1)控制n,下拉时自动递增为1、2、3...)ROW(...) - ROW(...) +1:计算区域内的相对行号,避免依赖绝对行号,无需手动调整偏移量IF:筛选出有效里程碑的行号(辅助列不为空/现金流总和>0)IFERROR:当无更多有效里程碑时返回空值,避免显示#NUM!错误
内容的提问来源于stack exchange,提问作者Guckinho
相关产品推荐
相关产品推荐

