我有一个第三方设备,每次执行测试时都会创建一个 .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 电子表格(因为它更容易维护 - 哈哈!)
任何想法将不胜感激!预先感谢!
这里/下面指的是。
警告:以下解决方案的当前状态。需要 Office 365 兼容版本 Excel:
使用给定的日期/时间戳字段准备两个排序列表(此处:col C:一个升序(
a0_
)和另一个降序(a0b_
);同样对带时间戳的唯一日期执行相同的操作(使用RoundDown
) - a1_
和 a1b_
分别
最短时间:(1) 中的索引
a0_
,并将 a1_
与带有时间戳的 a0_
匹配,0(完全匹配)。因为与 parm 0 的匹配标识了第一次出现,所以这将是给定日期的 min
时间,因为此步骤中使用的列表是按照相同的方向顺序排序的。
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”闹剧: