我有一个我不明白的复杂公式:
=map(A2:index(A:A,match(,0/(A:A<>""))),lambda(Σ,if(Σ="",,map(BZ1:CW1,lambda(Λ,let(x,index(sumifs('Ref4'!Q:Q,'Ref4'!G:G,Σ,--'Ref4'!P:P,">="&Λ,--'Ref4'!P:P,"<"&if(day(Λ)=1,offset(Λ,,1),eomonth(Λ,)))),if(x=0,,x)))))))
用于解决此处描述的问题:数组公式对匹配 ID 进行 SUM AND 当日期位于两个日期之间时
但是,我想将此公式放在标题中,因为我不断对工作表中的数据进行高级排序(数据-->排序范围--->高级范围排序选项),这会移动该公式的位置,因此会扰乱其计算。
我过去用作标题的完全不同的数组公式的示例如下所示:
={"Total Harvest kg";
ARRAYFORMULA(SUMPRODUCT(('Ref4'!$G$2:$G = TEXT($A$2:$A, "0")) * 'Ref4'!$Q$2:$Q))}
当我尝试时:
={"Don't Delete";
map(A2:index(A:A,match(,0/(A:A<>""))),lambda(Σ,if(Σ="",,map(BZ1:CW1,lambda(Λ,let(x,index(sumifs('Ref4'!Q:Q,'Ref4'!G:G,Σ,--'Ref4'!P:P,">="&Λ,--'Ref4'!P:P,"<"&if(day(Λ)=1,offset(Λ,,1),eomonth(Λ,)))),if(x=0,,x)))))))
}
我收到错误:#VALUE!在 ARRAY_LITERAL 中,数组文字缺少一行或多行的值。
理想情况下,我可以将此标题/公式放在 BY1 或 BZ1 中。如果它在 BZ1 中,标头仍需要是相同的日期“01/01/24” 这是表格:https://docs.google.com/spreadsheets/d/1k6nyu3xh0sLvbWjJ_vValAklzeTy72fvv3Cp0pEo--Y/edit?usp=sharing
您无法使用您使用的语法解决此问题,因为数组的列大小不匹配。由于地图是从 BZ 到 CW,因此相应的标题行应该有 24 列。
@rockinfreakshow 可能对此有一个深奥的解决方案。
如果是我,我会复制 BZ1:CW1,将其粘贴到隐藏选项卡中,然后使用该工作表引用作为标题行,将公式放在 BZ1 中。例如,
={dates!A1:X1;
map(A2:index(A:A,match(,0/(A:A<>""))),lambda(Σ,if(Σ="",,map(BZ1:CW1,lambda(Λ,let(x,index(sumifs('Ref4'!Q:Q,'Ref4'!G:G,Σ,--'Ref4'!P:P,">="&Λ,--'Ref4'!P:P,"<"&if(day(Λ)=1,offset(Λ,,1),eomonth(Λ,)))),if(x=0,,x)))))))
}