如何在Google Sheets中用QUERY查询拆分后的CSV并适配ARRAYFORMULA
解决方案
先明确下:从你给出的示例(指定5返回4、指定15返回10)来看,实际需求是找到小于等于指定数值的最大数;如果是你描述的“大于等于指定数值的最小数”,5应该返回10、15返回17。下面分别给出两种需求的公式,且都支持ARRAYFORMULA批量处理:
场景1:找小于等于指定值的最大数(匹配你的示例)
单值处理公式
假设指定数值在单元格A1:
=QUERY(SPLIT("1,4,10,17",","), "select Col1 where Col1 <= "&A1&" order by Col1 desc limit 1", 0)
逻辑:拆分字符串得到数字数组后,QUERY筛选出所有≤指定值的数,降序排列后取第一个(即符合条件的最大值)。
数组批量处理公式(支持多指定值)
如果指定数值在A1:A列,用MAP配合QUERY实现批量计算(新版Google Sheets支持):
=ARRAYFORMULA(MAP(A1:A, LAMBDA(x, IF(x="",,QUERY(SPLIT("1,4,10,17",","), "select Col1 where Col1 <= "&x&" order by Col1 desc limit 1", 0)))))
逻辑:遍历A1:A的每个数值,对每个值单独执行QUERY筛选逻辑,空值单元格返回空。
场景2:找大于等于指定值的最小数(按你原描述)
只需调整QUERY的筛选条件和排序方式:
单值处理公式
=QUERY(SPLIT("1,4,10,17",","), "select Col1 where Col1 >= "&A1&" order by Col1 asc limit 1", 0)
数组批量处理公式
=ARRAYFORMULA(MAP(A1:A, LAMBDA(x, IF(x="",,QUERY(SPLIT("1,4,10,17",","), "select Col1 where Col1 >= "&x&" order by Col1 asc limit 1", 0)))))
内容的提问来源于stack exchange,提问作者randonoob
相关产品推荐
相关产品推荐

