如何按起止日期筛选Google Sheets中符合条件的指定评论内容?
Google Sheets 公式修改:提取指定日期区间的评论行
原公式功能
原公式可从Master Line List工作表提取数据,筛选逻辑包括:
- 匹配
Calc工作表C1值的列I数据 - 匹配
Calc工作表D1值(或非空,当D1为"All"时)的列G数据 - 列F中存在日期在
Calc工作表G2-H2区间的评论行
原公式:
=filter(choosecols('Master Line List'!A:I,3,6,9,7,1), 'Master Line List'!I:I=C1, if(D1="All",'Master Line List'!G:G<>"",'Master Line List'!G:G=D1), byrow('Master Line List'!F:F,lambda(Σ,or(bycol(split(Σ,char(10)),lambda(Λ,isbetween(--left(Λ,find(" ",Λ)),G2,H2)))))))
需求
原公式会提取包含目标日期区间的整段评论,现需仅保留列F中日期在G2-H2区间的评论行,排除更早的内容。
错误尝试
以下公式出现解析错误,且未实现修改列F内容的核心需求:
=filter( choosecols('Master Line List'!A:I, 3, 6, 9, 7, 1), 'Master Line List'!I:I = C1, if(D1 = "All", 'Master Line List'!G:G <> '', 'Master Line List'!G:G = D1), byrow( 'Master Line List'!F:F, lambda( Σ, or( bycol( split(Σ, char(10)), lambda( Λ, and( isdate(--left(Λ, find(" ", Λ))), isbetween(--left(Λ, find(" ", Λ)), G2, H2) ) ) ) ) ) ), 'Master Line List'!F:F <> "" )
修正后的公式
=LET( 数据源, 'Master Line List'!A:I, 筛选后行, FILTER(数据源, INDEX(数据源,0,9)=C1, IF(D1="All", INDEX(数据源,0,7)<>"", INDEX(数据源,0,7)=D1), BYROW(INDEX(数据源,0,6), LAMBDA(Σ, OR(BYCOL(SPLIT(Σ, CHAR(10)), LAMBDA(Λ, ISBETWEEN(--LEFT(Λ, FIND(" ", Λ)), G2, H2)))))) ), 清理后评论, BYROW(INDEX(筛选后行,0,6), LAMBDA(Σ, TEXTJOIN(CHAR(10), TRUE, FILTER(SPLIT(Σ, CHAR(10)), ISBETWEEN(--LEFT(SPLIT(Σ, CHAR(10)), FIND(" ", SPLIT(Σ, CHAR(10)))), G2, H2)) )), HSTACK(INDEX(筛选后行,0,3), 清理后评论, INDEX(筛选后行,0,9), INDEX(筛选后行,0,7), INDEX(筛选后行,0,1)) )
逻辑说明
- 用
LET函数定义变量,简化公式结构 - 先筛选出符合基础条件的行(匹配C1、D1,且评论中存在目标日期区间的内容)
- 单独处理评论列(原第6列):拆分每行评论,筛选出日期在G2-H2区间的行,再用换行符合并
- 重新组合需要的列:原第3列、清理后的评论列、原第9列、原第7列、原第1列
内容的提问来源于stack exchange,提问作者Kolev_I_N
相关产品推荐
相关产品推荐

