【问题标题】:Date time diff in ExcelExcel中的日期时间差异
【发布时间】:2018-03-31 12:48:05
【问题描述】:

在计算115 的每个单元格之间的日期和时间差(以小时和分钟)时,我需要帮助。

问题是ref 并不相同,所以当refR001 更改为R002 时,公式应该从第一个单元格开始计算日期时间差 /em>,对最后一个单元格的新引用具有相同的ref

【问题讨论】:

  • 请添加您的预期输出。 (你的例子完成后应该是什么样子?)
  • 我试图让您的问题更容易理解,但我仍然不明白。预期的输出将有很大帮助,谢谢。
  • 第 12 行的日期故意比 R005 的第一个列表早吗?

标签: excel-formula


【解决方案1】:

此解决方案将使用 excel 中内置的 AGGREGATE、INDEX 和可选的 MINUTE 函数

步骤 1

构建一个唯一 ref ID 列表并将它们放在 D 列中

第二步

使用 AGGREGATE 确定出现 ref ID 的最后一行。

AGGREGATE(16,6,ROW($A$2:$A$16)/--($C$2:$C$16=D2),1)

AGGREGATE 是一个执行类似数组计算的函数。因此避免在函数中使用完整的列引用。

16 告诉 AGGREGATE 使用 LARGE 公式,因此它将按降序构建一个列表。

6 告诉 AGGREGATE 忽略/排除列表中的任何错误结果。

ROW() 将提取正在评估的行号。

-- 将结果 TRUE 或 FALSE 结果变为 1 或 0。

C2:C16=D2 正在查看该行是否具有 REF ID。

1 告诉 AGGREGATE 返回列表中的第一个数字。

第三步

冲洗,洗涤,重复。确定出现 ref ID 的第一行。

再次像以前一样使用聚合。除了这次不是 LARGE,我们想要找到 SMALL,因此将 16 更改为 15。这将返回 REF ID 第一次出现的行号。

AGGREGATE(15,6,ROW($A$2:$A$16)/--($C$2:$C$16=D2),1)

第四步

既然您知道要使用的 ROW#,请将行号放入 INDEX 公式中以获取您要使用的单元格。请注意,索引实际上返回单元格地址,因此可以像单元格引用一样使用。

第一次参考

INDEX(B:B,AGGREGATE(16,6,ROW($A$2:$A$16)/--($C$2:$C$16=D2),1))

上次参考

INDEX(B:B,AGGREGATE(15,6,ROW($A$2:$A$16)/--($C$2:$C$16=D2),1))

第 5 步

取Last和First之间的区别

INDEX(B:B,AGGREGATE(15,6,ROW($A$2:$A$16)/--($C$2:$C$16=D2),1))-INDEX(B:B,AGGREGATE(16,6,ROW($A$2:$A$16)/--($C$2:$C$16=D2),1))

现在,如果第一次引用发生在最后一次引用的时间戳之前,您将得到一个负数。如果您不关心负数,请将整个事物包装在绝对函数中或将结果平方然后平方根。

ABS(INDEX(B:B,AGGREGATE(15,6,ROW($A$2:$A$16)/--($C$2:$C$16=D2),1))-INDEX(B:B,AGGREGATE(16,6,ROW($A$2:$A$16)/--($C$2:$C$16=D2),1)))

将您选择的上述公式放入E2并根据需要复制下来。

第 6 步

由于您希望在几小时和几分钟内得到答案,因此我选择将信息分成两个单独的列,以便您可以根据需要使用它们。此外,我将引用 E 列中的值,而不是将它们嵌入到以下公式中,如果您想避免额外的列,这也是一种选择。

如果您将 E2 中的结果格式化为一般格式,您会注意到您得到一个整数和一些十进制值。整数表示天数。小数点将 TIME 表示为一天的一小部分。为了得到小时数,你乘以 24,因为一天有 24 小时,然后只取整数。将下面的公式放到F2中并向下复制。

INT(24*E2)

由于您还需要分钟,我们可以使用 MINUTE 函数直接从 E2 中提取这些分钟。将以下内容放在 G2 中并复制下来。

MINUTE(E2)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-09
    • 2012-02-04
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多