如何编写Excel公式来查找时间戳列中多天的最早和最晚时间

问题描述 投票:0回答:1

我有一个第三方设备,每次执行测试时都会创建一个 .CSV 结果文件,包括执行此测试时的时间戳。它可以运行几天。我被要求创建一个 Excel 电子表格,该电子表格采用此 .CSV 文件并提取每天第一次和最后一次测试的时间。这是供没有技术技能的最终用户使用的,目的是让他们打开此电子表格并打印预格式化的报告。

到目前为止,我所能做的就是找到最早和最晚的时间戳,但不是范围内每一天的最早/最晚时间。如果只有一天的数据,我没有问题(这种情况偶尔发生,但并非总是如此)

我可以找到范围内的天数:

=COUNT(UNIQUE(INT(Results.csv!N:N)))-1

(因为 CSV 有标题,所以我必须减去 1,因为它被视为唯一) 此外,列中的行数每次都会发生变化,并且无法估计每天执行的测试数量。

我可以像这样找到最早和最新的时间戳:

=MIN(结果.csv!N:N) =MAX(结果.csv!N:N)

我不知道每天的最小/最大时间。

我尝试过几种变体

=if (MIN(INT(Results.csv!N:N)), MIN(TRUNC(Results.csv),"") =if (MIN(INT(结果.csv!N:N)), MAX(TRUNC(结果.csv),"")

但是,如果它们有效的话,什么都没有给我我想要的东西

如果 CSV 文件按时间戳顺序排列,这会更容易,但 CSV 文件是按其他条件排序的,我无法更改它。

我也无法使用数据透视表,因为不能进行任何用户交互(除了打开此电子表格 - 除非有自动创建数据透视表的方法)。

我认为我们应该编写一个程序,但当权者坚持认为它是一个 Excel 电子表格(因为它更容易维护 - 哈哈!)

任何想法将不胜感激!预先感谢!

excel-formula
1个回答
0
投票

这里/下面指的是。

警告:以下解决方案的当前状态。需要 Office 365 兼容版本 Excel:

  1. 使用给定的日期/时间戳字段准备两个排序列表(此处:col C:一个升序(

    a0_
    )和另一个降序(
    a0b_
    );同样对带时间戳的唯一日期执行相同的操作(使用
    RoundDown
    ) -
    a1_
    a1b_
    分别

  2. 最短时间:(1) 中的索引

    a0_
    ,并将
    a1_
    与带有时间戳的
    a0_
    匹配,0(完全匹配)。因为与 parm 0 的匹配标识了第一次出现,所以这将是给定日期的
    min
    时间,因为此步骤中使用的列表是按照相同的方向顺序排序的。

  3. Max
    时间:使用其他列表(此处:降序),并采用某种方法如(2)[现在你会发现第一个出现的情况是从给定日期的最大日期/时间开始,即最大值) .


备注:

  • 无需辅助函数即可实现预期目标*
  • *注意:虽然
    let
    将隐式创建“soi-disant”辅助函数,但它们并不是需要完全独立的先例/依赖列的显式风格...

功能:

=LET(
a0_,SORT(C4:C255),a0b_,SORT(C4:C255,,-1),
a1_,SORT(UNIQUE(ROUNDDOWN(a0_,0))),a1b_,SORT(UNIQUE(ROUNDDOWN(a0b_,0)),,-1),
c_,SORT(INDEX(a0_,MATCH(a1_,ROUNDDOWN(a0_,0),0))),cb_,SORT(INDEX(a0b_,MATCH(a1b_,ROUNDDOWN(a0b_,0),0)),,1),
z_,HSTACK(a1_,c_,cb_),z_)


其他注意事项:

*这不是一项简单的任务!赞成 q:因为 StackOverflow 建议指出的前 3 个“类似问题”使用 VB、powerquery 回答了完全不同的问题,并且只是一种干扰,就像迄今为止关于使用数据透视表的单一评论一样。几乎与问题相符,更不用说为此问题指定的标签名称了!!

例如:StackOverflow“建议类似的 Q”闹剧:

  • first提出了一个VB解决方案(我没有看到你要求这样);事实上 - 您要求的是完全不同的东西(vide-licit 'Excel function' - 每个标签);对于当前的问题只有一种解决方案,与当前情况没有什么不同......
  • second处理powerquery;虽然提供了一个函数,但它只是返回整个日期范围,这与查找各个日期的“最小值”/“最大值”几乎没有什么不同。

© www.soinside.com 2019 - 2024. All rights reserved.