关于excel中数组减法的建议

关于excel中数组减法的建议,excel,excel-formula,Excel,Excel Formula,我需要帮助或建议如何改进以下公式: =TEXT(SUMPRODUCT((B2:O2*(MOD(COLUMN(B2:O2);2)=1))-(B2:O2*(MOD(COLUMN(B2:O2);2)=0)))/(COUNTIF(B2:O2;"<>")/2);"d ""Days"", h""h"" mm""min""") =TEXT(SUMPRODUCT((B2:O2*(模数(B2:O2列);2)=1))-(B2:O2*(模数(B2:O2列);2)=0))/(COUNTIF(B2:O2;

我需要帮助或建议如何改进以下公式:

 =TEXT(SUMPRODUCT((B2:O2*(MOD(COLUMN(B2:O2);2)=1))-(B2:O2*(MOD(COLUMN(B2:O2);2)=0)))/(COUNTIF(B2:O2;"<>")/2);"d ""Days"", h""h"" mm""min""")
=TEXT(SUMPRODUCT((B2:O2*(模数(B2:O2列);2)=1))-(B2:O2*(模数(B2:O2列);2)=0))/(COUNTIF(B2:O2;“”)/2;“d”“天”,“h”“h”“mm”“分钟”)
上述公式仅适用于偶数对的情况

我的目标是得到日期之间的差异,然后得到差异的平均值。可能有未知数量的列。简化方法如下所示:

和((Z1-Y1)+(Y1-X1)+(X1-W1)+(…)+(B1-A1))/26

以下示例数据的屏幕截图:

第1行:偶数个时间条目

第2行:数字不均匀,公式失败

提前谢谢

回答:

=IF(ISEVEN(COUNT(B2:O2));TEXT(SUMPRODUCT((B2:O2*(MOD(COLUMN(B2:O2);2)=1))-(B2:O2*(MOD(COLUMN(B2:O2);2)=0)))/(COUNTIF(B2:O2;"<>")/2);"d ""Days"", h""h"" mm""min""");TEXT(SUMPRODUCT((INDIRECT("B"&(INDEX(ROW();1))&":"&ToColletter(COUNT(B2:O2))&(INDEX(ROW();1)))*(MOD(COLUMN(INDIRECT("B"&(INDEX(ROW();1))&":"&ToColletter(COUNT(B2:O2))&(INDEX(ROW();1))));2)=1))-(INDIRECT("B"&(INDEX(ROW();1))&":"&ToColletter(COUNT(B2:O2))&(INDEX(ROW();1)))*(MOD(COLUMN(INDIRECT("B"&(INDEX(ROW();1))&":"&ToColletter(COUNT(B2:O2))&(INDEX(ROW();1))));2)=0)))/((COUNTIF(B2:O2;"<>")-1)/2);"d ""Days"", h""h"" mm""min"""))

这里我有一个不同的解决方案

基本上,您可以尝试的公式如下(由于区域设置问题,您可能需要将
替换为
):

正如你可以看到下面的图片,你会得到你想要的结果。这样做的目的是使用
奇数列(C、E、G等)
减去
偶数列(B、D、F等)
,然后取平均值。信不信由你,突出显示绿色单元格,你会发现平均数就是你想要的

但是,对于某些示例,您没有成对的列,需要忽略最后一列。这就是为什么您看到
COUNTA
COUNTIF
只是为了确定是否需要从公式中删除最后一列

另一个需要注意的是列范围。我使用
OFFSET
查找由于成对列问题需要在公式中计算的范围。因此,
SUMPRODUCT
内部的这四个
B2:O2
=偏移量(A2,1,IF(ISODD(COUNTA(B2:O2))、COUNTA(B2:O2)-1、COUNTA(B2:O2))
取代

以下是您可以尝试的最终公式:

=TEXT(SUMPRODUCT(ISODD(COLUMN(OFFSET(A2,,1,,IF(ISODD(COUNTA(B2:O2)),COUNTA(B2:O2)-1,COUNTA(B2:O2)))))*(OFFSET(A2,,1,,IF(ISODD(COUNTA(B2:O2)),COUNTA(B2:O2)-1,COUNTA(B2:O2))))-ISEVEN(COLUMN(OFFSET(A2,,1,,IF(ISODD(COUNTA(B2:O2)),COUNTA(B2:O2)-1,COUNTA(B2:O2)))))*(OFFSET(A2,,1,,IF(ISODD(COUNTA(B2:O2)),COUNTA(B2:O2)-1,COUNTA(B2:O2)))))/IF(ISODD(COUNTA(B2:O2)),(COUNTA(B2:O2)-1)/2,COUNTA(B2:O2)/2),"d ""Days"", h""h"" mm""min""")

让我知道这是否解决了你的问题。

在你的“简单公式”中,
(Z1-Y1)+(Y1-X1)+(X1-W1)+(…)+(B1-A1)
不能被大幅简化为
Z1-A1
?@Peter-Boom,数学!好主意。@BruceWayne我不知道你是不是在挖苦人haha@Peter-我不是!我经常被公式工作/不工作所困扰,我忘了退一步,我意识到我可以让它变得更简单…就像你对那个长公式的建议一样:谢谢你的评论,但是对于简单的((Z1-Y1)+(…)+(B1-A1))我需要得到每对的时差,然后我需要得到所有这些时差的平均值。所以Z1-A1不起作用。我在考虑补偿,但我的尝试没有好结果。非常感谢您对更复杂产品的帮助。嗨,谢谢!它起作用了。我对补偿法很感兴趣,所以会仔细研究。
=TEXT(SUMPRODUCT(ISODD(COLUMN(B2:O2))*(B2:O2)-ISEVEN(COLUMN(B2:O2))*(B2:O2))/IF(ISODD(COUNTA(B2:O2)),(COUNTA(B2:O2)-1)/2,COUNTA(B2:O2)/2),"d ""Days"", h""h"" mm""min""")
=TEXT(SUMPRODUCT(ISODD(COLUMN(OFFSET(A2,,1,,IF(ISODD(COUNTA(B2:O2)),COUNTA(B2:O2)-1,COUNTA(B2:O2)))))*(OFFSET(A2,,1,,IF(ISODD(COUNTA(B2:O2)),COUNTA(B2:O2)-1,COUNTA(B2:O2))))-ISEVEN(COLUMN(OFFSET(A2,,1,,IF(ISODD(COUNTA(B2:O2)),COUNTA(B2:O2)-1,COUNTA(B2:O2)))))*(OFFSET(A2,,1,,IF(ISODD(COUNTA(B2:O2)),COUNTA(B2:O2)-1,COUNTA(B2:O2)))))/IF(ISODD(COUNTA(B2:O2)),(COUNTA(B2:O2)-1)/2,COUNTA(B2:O2)/2),"d ""Days"", h""h"" mm""min""")