Google Sheets技术求助:如何将每组4列合并制作工资单清单
解决方案
要实现从多组列中提取4列并堆叠成工资单核对清单,同时过滤掉姓名为空的行,可参考以下两种方法:
方法1:数组堆叠 + QUERY过滤(推荐)
直接将每组需要的4列区域按行堆叠,再用QUERY函数筛选非空姓名行:
=QUERY({C5:F28;K5:N28;S5:V28;AA5:AD28;AI5:AL28}, "where Col1 is not null", 0)
- 大括号
{}内用分号;分隔不同区域,实现行方向的堆叠,需确保每个区域都是4列,堆叠后可保持4列结构 where Col1 is not null用于过滤掉姓名列(每组的第一列)为空的行- 末尾的
0表示原区域无需保留表头
如果你的每组4列不是前4列,只需调整括号内的区域即可,比如要提取每组的第1、3、4、6列,可写成:
=QUERY({C5:C28,E5:F28,H5:H28;K5:K28,M5:N28,P5:P28;S5:S28,U5:V28,X5:X28;AA5:AA28,AC5:AD28,AF5:AF28;AI5:AI28,AK5:AL28,AN5:AN28}, "where Col1 is not null", 0)
方法2:处理FLATTEN的结果(适用于复杂列提取)
如果必须基于FLATTEN的结果恢复4列结构,可结合INDEX和SEQUENCE函数:
=ARRAYFORMULA(INDEX(FLATTEN(C5:F28;K5:N28;S5:V28;AA5:AD28;AI5:AL28), SEQUENCE(ROWS(C5:F28)*5,4)))
再嵌套FILTER过滤非空行:
=FILTER(ARRAYFORMULA(INDEX(FLATTEN(C5:F28;K5:N28;S5:V28;AA5:AD28;AI5:AL28), SEQUENCE(ROWS(C5:F28)*5,4))), INDEX(ARRAYFORMULA(INDEX(FLATTEN(C5:F28;K5:N28;S5:V28;AA5:AD28;AI5:AL28), SEQUENCE(ROWS(C5:F28)*5,4))),,1)<>"")
这种方法先通过FLATTEN把所有数据转成单列,再用INDEX和SEQUENCE将其重新组织成4列表格,最后用FILTER去掉姓名为空的行。
内容的提问来源于stack exchange,提问作者user22518832
相关产品推荐
相关产品推荐

