Google Sheets:使用SORT/QUERY函数正确排序圣经经文章节
解决Google表格圣经经文排序异常问题
问题原因
表格将1:12、1:2这类经文标识按文本字符串排序,文本排序是逐字符对比:1:之后的1字符编码小于2,导致1:12排在1:2前面,不符合章节号的逻辑排序规则。
解决方案
列格式设置无法直接解决(格式仅改变显示样式,不修改单元格值的类型),需通过公式提取章节数字作为排序依据:
方案一:用辅助列拆分章节排序
- 给QUERY返回的结果新增两列,提取章、节的数字值:
- 章号提取公式:
=LEFT(Col5, FIND(":", Col5)-1)*1(乘1将文本转为数字) - 节号提取公式:
=RIGHT(Col5, LEN(Col5)-FIND(":", Col5))*1
- 章号提取公式:
- 用SORT函数按章号、节号依次升序排序:
注:公式中=SORT(QUERY({'1 Chronicles'!A:O,Ezra!A:O}, "select Col4, Col5, Col1, Col2, Col3 where Col4 contains 'Matthew'"), 5, TRUE, 6, TRUE, 7, TRUE)6、7为新增章号、节号列的位置,需根据实际调整。
方案二:无需辅助列,直接生成排序键(推荐)
用LET函数封装中间结果,直接生成排序依据,避免手动添加辅助列:
=LET( raw_data, QUERY({'1 Chronicles'!A:O,Ezra!A:O}, "select Col4, Col5, Col1, Col2, Col3 where Col4 contains 'Matthew'"), chapter_num, ARRAYFORMULA(LEFT(INDEX(raw_data,,5), FIND(":", INDEX(raw_data,,5))-1)*1), verse_num, ARRAYFORMULA(RIGHT(INDEX(raw_data,,5), LEN(INDEX(raw_data,,5))-FIND(":", INDEX(raw_data,,5)))*1), SORT(raw_data, chapter_num, TRUE, verse_num, TRUE) )
注:原公式存在引号嵌套错误,已修正为标准Google表格QUERY语法(双引号包裹完整查询语句,内部字符串用单引号)。
内容的提问来源于stack exchange,提问作者Jeremy Menicucci
相关产品推荐
相关产品推荐

