有关excel

时间:2017-10-03 16:03:37

标签: 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""")

以上公式仅在偶数对时才有效。

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

萨姆((Z1-Y1)+(Y1-X1)+(X1-W1)+(...)+(B1-A1))/ 26

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

第1行:偶数个条目

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

enter image description here

提前致谢!

2 个答案:

答案 0 :(得分:1)

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

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

=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""")

正如您可以看到下面的图片,您将获得所需的结果。这样做是使用odd columns (C, E, G etc.)减去even columns (B, D, F etc.)然后取平均值。信不信由你,突出绿色细胞,你应该找出你正在寻找的平均数字。

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

需要注意的另一件事是列范围。由于配对列问题,我使用OFFSET来查找公式中需要评估的范围。因此,B2:O2's内的SUMPRODUCT内的=OFFSET(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""") 取代。

您可以尝试以下最终公式

"lessons": {
  "lessonKey1": {
    "title": "rocks and dirt",
    "description": "introductory....",
    "class": "Remedial classes",
  }

如果这可以解决您的问题,请告诉我。

答案 1 :(得分:0)

答案:

=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"""))

帮助功能:

Public Function ToColletter(Collet)
    ToColletter = Split(Cells(1, Collet).Address, "$")(1)
End Function

enter image description here