Google Sheets如何为QUERY查询结果依次添加小写字母序号
问题原因
你之前的尝试失败核心有三点:
CHAR(ROW(97))单独使用只会返回固定的字符a,无法根据QUERY返回的条目位置动态生成递增的字母序号- 你把字符拼接进QUERY的查询数组后,查询的列索引发生了变化,原来的
select C对应位置错误,取不到目标内容 ARRAYFORMULA没有包裹到需要逐行生成序号的逻辑,无法实现动态编号
可用解决方案
直接用CHAR(96+序号)的逻辑生成小写字母序号,比你提到的lower(regexreplace(...))方案更简洁高效,以下是对应公式:
单单元格公式(对应A4单个日期计算,需要下拉填充)
如果你的表格区域设置用逗号作为公式分隔符,使用以下公式:
=IFERROR( TEXTJOIN( CHAR(10), TRUE, BYROW( SEQUENCE(COUNTA(QUERY(Page2!$A$3:$C, "select C where A <= date '"&TEXT(DATEVALUE(A4),"yyyy-mm-dd")&"' and (B >= date '"&TEXT(DATEVALUE(A4),"yyyy-mm-dd")&"' or B is null)"))), LAMBDA(idx, CHAR(96 + idx)&") "& INDEX(QUERY(Page2!$A$3:$C, "select C where A <= date '"&TEXT(DATEVALUE(A4),"yyyy-mm-dd")&"' and (B >= date '"&TEXT(DATEVALUE(A4),"yyyy-mm-dd")&"' or B is null)"), idx) ) ) ) )
如果你的区域设置用分号作为公式分隔符,把上面所有逗号替换为分号即可。
数组溢出公式(输入一次自动对应A列所有非空日期生成结果,无需下拉)
=BYROW( FILTER(A4:A, A4:A<>""), LAMBDA(dt, IFERROR( TEXTJOIN( CHAR(10), TRUE, BYROW( SEQUENCE(COUNTA(QUERY(Page2!$A$3:$C, "select C where A <= date '"&TEXT(DATEVALUE(dt),"yyyy-mm-dd")&"' and (B >= date '"&TEXT(DATEVALUE(dt),"yyyy-mm-dd")&"' or B is null)"))), LAMBDA(idx, CHAR(96 + idx)&") "& INDEX(QUERY(Page2!$A$3:$C, "select C where A <= date '"&TEXT(DATEVALUE(dt),"yyyy-mm-dd")&"' and (B >= date '"&TEXT(DATEVALUE(dt),"yyyy-mm-dd")&"' or B is null)"), idx) ) ) ), "" ) ) )
补充说明
如果你的查询结果条目可能超过26个(超过字母z的范围),可以替换序号生成逻辑为多字母编号,当前方案最多支持26条条目,符合你给出的示例场景需求。
内容的提问来源于stack exchange,提问作者Antonio Padua
相关产品推荐
相关产品推荐

