如何对含合并单元格的表格进行逆透视(Unpivot)处理?
解决合并单元格日程表扁平化的空值问题
修正后的公式
=ArrayFormula( QUERY( SPLIT( FLATTEN( IFERROR(VLOOKUP(ROW(MAIN!$D$4:$D$51),FILTER({ROW(MAIN!$D$4:$D$51),MAIN!$D$4:$D$51},MAIN!$D$4:$D$51<>""),2,FALSE))&"|&"& IFERROR(VLOOKUP(ROW(MAIN!$E$4:$E$51),FILTER({ROW(MAIN!$E$4:$E$51),MAIN!$E$4:$E$51},MAIN!$E$4:$E$51<>""),2,FALSE))&"|&"& MAIN!$F$3:$M$3&"| "& IF(MAIN!$F$4:$M$51=1,"Работает",MAIN!$F$4:$M$51) ),"|",, ),"select * where Col4 <> '' ",0 ) )
公式说明
- 填充合并单元格空白值:通过
VLOOKUP+FILTER组合自动补全D、E列合并单元格的空白行,确保每一行都有对应的部门和姓名值,从根源避免合并单元格空值导致的拆分后空单元格。 - 过滤空日程内容:用
QUERY函数筛选掉日程内容为空的行,彻底清除扁平化后的空行。 - 保留原有逻辑:维持了原公式中数值转文本(
1转Работает)、FLATTEN转置、SPLIT拆分的核心逻辑。
简化替代方案(仅D列为合并单元格时适用)
如果只有部门列(D列)存在合并单元格,可使用SCAN函数更简洁地填充空白:
=ArrayFormula( QUERY( SPLIT( FLATTEN( SCAN("",MAIN!$D$4:$D$51,LAMBDA(a,c,IF(c="",a,c)))&"|&"& MAIN!$E$4:$E$51&"|&"& MAIN!$F$3:$M$3&"| "& IF(MAIN!$F$4:$M$51=1,"Работает",MAIN!$F$4:$M$51) ),"|",, ),"select * where Col4 <> '' ",0 ) )
内容的提问来源于stack exchange,提问作者SoursXond
相关产品推荐
相关产品推荐

