Google Sheets数据集多条件转换:行拆分、日期处理与排序需求
Google Sheets 数据集拆分转换方案
核心需求
- 当「是否进一步拆分」列值为「是」时,将该行拆分为多行输出到指定工作表
- 若「替代日期(若不同)」列为空,使用「时间戳」列的日期部分
- 最终输出按日期升序排序,且支持数据集持续扩充
输入数据集
| 时间戳 | 替代日期(若不同) | 总费用 | 采购类型 | 商家名称 | 描述 | 收据链接 | 是否进一步拆分 | 子项费用 | 子项采购类型 | 子项描述 | 是否进一步拆分 | 子项费用 | 子项采购类型 | 子项描述 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 08/04/2024 21:05:14 | 2054 | 牛 | Farmers First | 17头牛 | 是 | 893.65 | 羊 | 3只羊 | 是 | 630 | 山羊 | 7只山羊 | ||
| 08/04/2024 21:06:15 | 893 | 牛 | Outbacks | 4头牛 | example.com | |||||||||
| 08/04/2024 21:08:17 | 06/04/2024 | 832 | 羊 | Western Out | 9只羊 | example.com | 是 | 9302 | 山羊 | 1000只山羊 | 否 |
预期输出
| 日期 | 费用 | 分类 | 商家名称 | 收据链接 | 描述 |
|---|---|---|---|---|---|
| 06/04/2024 | 832 | 羊 | Western Out | example.com | 9只羊 |
| 06/04/2024 | 9302 | 山羊 | Western Out | example.com | 1000只山羊 |
| 08/04/2024 | 893 | 牛 | Outbacks | example.com | 4头牛 |
| 08/04/2024 | 2054 | 牛 | Farmers First | 17头牛 | |
| 08/04/2024 | 893.65 | 羊 | Farmers First | 3只羊 | |
| 08/04/2024 | 630 | 山羊 | Farmers First | 7只山羊 |
实现方法(自动适配扩充)
在输出工作表的A2单元格输入以下公式,新增数据会被自动纳入处理:
=SORT(QUERY(SPLIT(FLATTEN(ARRAYFORMULA(IF(ISBLANK(A2:A),,{ IF(B2:B="",TEXT(A2:A,"dd/mm/yyyy"),B2:B)&"|"&C2:C&"|"&D2:D&"|"&E2:E&"|"&G2:G&"|"&F2:F; IF(H2:H="Yes",IF(I2:I="",,"|"&I2:I&"|"&J2:J&"|"&E2:E&"|"&G2:G&"|"&K2:K),); IF(H2:H="Yes",IF(M2:M="",,"|"&M2:M&"|"&N2:N&"|"&E2:E&"|"&G2:G&"|"&O2:O),) })), "|"), "select Col1,Col2,Col3,Col4,Col5,Col6 where Col1 is not null",0),1,TRUE)
公式逻辑
- ARRAYFORMULA:批量遍历整列数据,无需手动更新范围
- 日期补全:空替代日期时,自动提取时间戳的日期部分
- 行拆分:将原行与拆分的子项行拼接,再平铺为单列
- 列拆分:按分隔符「|」将单列数据拆分为目标列结构
- 筛选排序:过滤空行后按日期升序排列
内容的提问来源于stack exchange,提问作者Webber
相关产品推荐
相关产品推荐

