求Google Sheets中替代Index-Match的ArrayFormula/Map自动填充公式
解决方案
A列自动扩展公式
直接在A4单元格输入以下公式,新增数据行时会自动计算:
=BYROW(C4:C, LAMBDA(amt, IF(ISBLANK(amt), "", IF(amt>0, $A$1, IFERROR(INDEX($D$3:$G$3, MATCH(amt, INDIRECT("D"&ROW(amt)&":G"&ROW(amt)), 0)), "") ) ) ))
逻辑说明
BYROW(C4:C, LAMBDA(amt, ...)):遍历C列从第4行开始的每一行,将当前行的金额值传入变量amt- 先判断金额是否为空,为空则返回空值
- 若金额>0,直接返回A1单元格的固定值
- 若金额<0,用
MATCH定位当前行D-G列中金额的位置,再通过INDEX取出D3:G3对应的表头;匹配失败时返回空值
B列自动扩展公式
在B4单元格输入以下公式,同样支持新增行自动生效:
=BYROW(C4:C, LAMBDA(amt, IF(ISBLANK(amt), "", IF(amt>0, IFERROR(INDEX($D$3:$G$3, MATCH(amt, INDIRECT("D"&ROW(amt)&":G"&ROW(amt)), 0)), ""), $A$1 ) ) ))
逻辑说明
- 核心结构与A列一致,仅反转判断逻辑:
- 金额>0时,匹配当前行D-G列的金额并返回对应表头
- 金额<0时,返回A1单元格的固定值
替代方案(ArrayFormula写法)
如果偏好使用ARRAYFORMULA,可以用以下版本:
A列:
=ARRAYFORMULA( IF(ISBLANK(C4:C), "", IF(C4:C>0, $A$1, IFERROR(VLOOKUP(C4:C, TRANSPOSE({D4:G, D3:G3}), 2, 0), "") ) ) )
B列:
=ARRAYFORMULA( IF(ISBLANK(C4:C), "", IF(C4:C>0, IFERROR(VLOOKUP(C4:C, TRANSPOSE({D4:G, D3:G3}), 2, 0), ""), $A$1 ) ) )
逻辑说明
TRANSPOSE({D4:G, D3:G3}):将每行的D-G数据与对应表头转置为两列的查找表VLOOKUP在查找表中匹配金额,返回对应的表头;匹配失败时返回空值
内容的提问来源于stack exchange,提问作者tedioustortoise
相关产品推荐
相关产品推荐

