Google Sheets中Vlookup+Filter+Sort+ArrayFormula替代方案求助
替代方案
方案1:使用XLOOKUP+BYROW组合
在RECORDS表的C1单元格输入以下公式(建议用具体数据范围如E2:G代替整列E:G,避免表头干扰):
=ARRAYFORMULA(IF(A2:A="",,BYROW(A2:A&"|"&B2:B,LAMBDA(x,LET( type, LEFT(x, FIND("|", x)-1), entry_date, VALUE(RIGHT(x, LEN(x)-FIND("|", x))), XLOOKUP(1, (E2:E=type)*(G2:G<=entry_date), F2:F,, 0, -1) )))))
逻辑说明:
ARRAYFORMULA触发整列自动计算,适配后续新增行IF(A2:A="",,)跳过空行,避免无效计算和错误值BYROW逐行处理每行的Type和Entry Date(用|拼接后拆分,避免数据混淆)XLOOKUP的-1参数指定返回最后一个匹配项,也就是Entry Date之前最近的状态变更记录
方案2:使用QUERY+BYROW组合
如果更习惯用QUERY语法,可替换为:
=ARRAYFORMULA(IF(A2:A="",,BYROW(A2:A&"|"&B2:B,LAMBDA(x,LET( type, LEFT(x, FIND("|", x)-1), entry_date, VALUE(RIGHT(x, LEN(x)-FIND("|", x))), INDEX(QUERY(E2:G,"select F where E='"&type&"' and G <= date '"&TEXT(entry_date,"yyyy-mm-dd")&"' order by G desc limit 1"),1) )))))
逻辑说明:
QUERY筛选对应Type且变更日期≤Entry Date的记录,按变更日期降序排序后取第一条(最近状态)INDEX提取QUERY返回的结果值
注意事项
- 确保TYPES表的G列(变更日期)和RECORDS表的B列(Entry Date)均为标准日期格式
- 如果Type中包含
|,可替换为其他无冲突字符(如^)进行拼接
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

