Excel:整理识别引擎收集的不准确数据。我想计算从第一次看到和最后一次看到的时间开始的工作时间
Excel: organizing inaccurate data collected by a recognition engine. I would like to calculate time worked from time first and last seen
我有一个实验性识别引擎收集的大量数据电子表格。它根据面部数据收集开始时间和完成时间数据。我遇到的问题是,不同的角度和照明会导致识别系统认为一个人是两个或三个(或者在一个特定情况下,12)。我已经仔细检查并手动编辑了电子表格以包含正确的工人姓名,但我想计算每个人的工作时间。
目前,电子表格如下所示:
Name Date Time Started Time Finished
Person A 17/05/2016 10:30:20 AM 17/05/2016 10:30:20 AM 17/05/2016 10:41:18 AM
Person A 17/05/2016 10:41:20 AM 17/05/2016 10:41:20 AM 17/05/2016 10:41:20 AM
Person A 17/05/2016 11:07:09 AM 17/05/2016 11:07:09 AM 17/05/2016 11:55:24 AM
Person B 17/05/2016 10:58:30 AM 17/05/2016 10:58:30 AM 17/05/2016 10:58:30 AM
Person B 17/05/2016 10:58:42 AM 17/05/2016 10:58:42 AM 17/05/2016 10:58:42 AM
Person C 17/05/2016 10:28:05 AM 17/05/2016 10:28:05 AM 17/05/2016 11:19:28 AM
Person C 17/05/2016 10:30:26 AM 17/05/2016 10:30:26 AM 17/05/2016 11:52:56 AM
Person C 17/05/2016 10:43:30 AM 17/05/2016 10:43:30 AM 17/05/2016 11:27:20 AM
这是代码示例,但它是针对人员 Q 的。
我已经按照最后一次看到的时间顺序排列了它,所以基本上我想添加一个列,从最初的工作时间减去最后的工作时间。
对于每个姓名,可以通过从最后一个 Time Finished
条目中减去第一个 Time Started
条目来计算正确的工作时间。所以在这个例子中,我可以通过以下方式找到 Person C
的工作时间:17/05/2016 11:27:20 AM
- 17/05/2016 10:28:05 AM
.
到目前为止,我一直在手动执行此操作,但我更喜欢一个可以查看 Name
列中的数据的函数,然后通过查找第一个来计算 Hours Worked
Time Started
个条目并从最后一个 Time Finished
个条目中减去它。
任何人都可以在 Excel 中提供一些有关如何执行此操作的指导吗?如果不是,在Excel-VBA有可能吗?
提前致谢。
我尝试了各种公式来提取日期和时间数据,如下图所示。
D1
中使用的完整公式为
=(DATE(MID(TRIM(C1),7,4),MID(TRIM(C1),4,2),MID(TRIM(C1),1,2))+TIME(MID(TRIM(C1),12,2),MID(TRIM(C1),15,2),MID(TRIM(C1),18,2))-=DATE(MID(TRIM(B1),7,4),MID(TRIM(B1),4,2),MID(TRIM(B1),1,2))+TIME(MID(TRIM(B1),12,2),MID(TRIM(B1),15,2),MID(TRIM(B1),18,2)))
然后 D1
和 E1
中所示的差异导致了错误的结果,这可能是由于外部数据和系统本机功能造成的。虽然我可以通过仅包含日期和时间部分的修剪字符串来获得正确的结果,但它需要针对 AM/PM
进行调整
考虑到这些问题,我建议您采用另一种方法,如果方便您采用的话。
- 将您的 sheet 数据复制/粘贴到免费文本编辑器 Note Tab Light,并将其另存为文本文件。
- 在 Excel 中导入保存的具有固定分隔符的文本文件,但删除日期和时间部分之间的分隔线,其余部分保持原样。
- 在 I3 中输入简单公式计算完成时间和开始时间之间的时间差,即
=G3-E3
- 您可以通过本机 Excel 函数对人员进行合计。
示例数据图片如下。
在 table 中添加一列。称之为 Elapsed
在下面的公式中,请注意我使用了命名范围。您也可以这样做;用绝对地址替换它们;或者,如果您的数据在 Table 中,请将它们替换为适当的结构化引用。
2016 年 Excel:
=MAXIFS(Time_Finished,Name,$A2)-MINIFS(Time_Started,Name,$A2)
在早期版本中,您需要输入一个与数组公式略有不同的公式。您可以通过按住 ctrl+shift
同时点击 enter
来实现
=MAX(IF($A2=Name,Time_Finished))- MIN(IF($A2=Name,Time_Started))
这将为您提供如下所示的输出:
然后您可以根据您的要求以多种方式按人分组。
支点 table 是你的朋友。我不确定您的 date/time 字段是如何格式化的,因此在我的屏幕截图中,我将 date/time 的开始和结束分为日期和时间字段。
旋转 table,其中包含名称以及开始和结束 date/time 标记。
行=名称
值 = 结束日期;时间结束;开始日期;开始时间
对于每个值,单击下拉列表和 select 'Field Value Settings'。
对于结束 date/time select 'Max' 值。
对于开始 date/time select 'Min' 值。
然后只需输入一个简单的公式,并将其格式化为时间。
Screenshot of excel pivot table showing setting
我有一个实验性识别引擎收集的大量数据电子表格。它根据面部数据收集开始时间和完成时间数据。我遇到的问题是,不同的角度和照明会导致识别系统认为一个人是两个或三个(或者在一个特定情况下,12)。我已经仔细检查并手动编辑了电子表格以包含正确的工人姓名,但我想计算每个人的工作时间。
目前,电子表格如下所示:
Name Date Time Started Time Finished
Person A 17/05/2016 10:30:20 AM 17/05/2016 10:30:20 AM 17/05/2016 10:41:18 AM
Person A 17/05/2016 10:41:20 AM 17/05/2016 10:41:20 AM 17/05/2016 10:41:20 AM
Person A 17/05/2016 11:07:09 AM 17/05/2016 11:07:09 AM 17/05/2016 11:55:24 AM
Person B 17/05/2016 10:58:30 AM 17/05/2016 10:58:30 AM 17/05/2016 10:58:30 AM
Person B 17/05/2016 10:58:42 AM 17/05/2016 10:58:42 AM 17/05/2016 10:58:42 AM
Person C 17/05/2016 10:28:05 AM 17/05/2016 10:28:05 AM 17/05/2016 11:19:28 AM
Person C 17/05/2016 10:30:26 AM 17/05/2016 10:30:26 AM 17/05/2016 11:52:56 AM
Person C 17/05/2016 10:43:30 AM 17/05/2016 10:43:30 AM 17/05/2016 11:27:20 AM
这是代码示例,但它是针对人员 Q 的。
我已经按照最后一次看到的时间顺序排列了它,所以基本上我想添加一个列,从最初的工作时间减去最后的工作时间。
对于每个姓名,可以通过从最后一个 Time Finished
条目中减去第一个 Time Started
条目来计算正确的工作时间。所以在这个例子中,我可以通过以下方式找到 Person C
的工作时间:17/05/2016 11:27:20 AM
- 17/05/2016 10:28:05 AM
.
到目前为止,我一直在手动执行此操作,但我更喜欢一个可以查看 Name
列中的数据的函数,然后通过查找第一个来计算 Hours Worked
Time Started
个条目并从最后一个 Time Finished
个条目中减去它。
任何人都可以在 Excel 中提供一些有关如何执行此操作的指导吗?如果不是,在Excel-VBA有可能吗?
提前致谢。
我尝试了各种公式来提取日期和时间数据,如下图所示。
D1
中使用的完整公式为
=(DATE(MID(TRIM(C1),7,4),MID(TRIM(C1),4,2),MID(TRIM(C1),1,2))+TIME(MID(TRIM(C1),12,2),MID(TRIM(C1),15,2),MID(TRIM(C1),18,2))-=DATE(MID(TRIM(B1),7,4),MID(TRIM(B1),4,2),MID(TRIM(B1),1,2))+TIME(MID(TRIM(B1),12,2),MID(TRIM(B1),15,2),MID(TRIM(B1),18,2)))
然后 D1
和 E1
中所示的差异导致了错误的结果,这可能是由于外部数据和系统本机功能造成的。虽然我可以通过仅包含日期和时间部分的修剪字符串来获得正确的结果,但它需要针对 AM/PM
考虑到这些问题,我建议您采用另一种方法,如果方便您采用的话。
- 将您的 sheet 数据复制/粘贴到免费文本编辑器 Note Tab Light,并将其另存为文本文件。
- 在 Excel 中导入保存的具有固定分隔符的文本文件,但删除日期和时间部分之间的分隔线,其余部分保持原样。
- 在 I3 中输入简单公式计算完成时间和开始时间之间的时间差,即
=G3-E3
- 您可以通过本机 Excel 函数对人员进行合计。 示例数据图片如下。
在 table 中添加一列。称之为 Elapsed
在下面的公式中,请注意我使用了命名范围。您也可以这样做;用绝对地址替换它们;或者,如果您的数据在 Table 中,请将它们替换为适当的结构化引用。
2016 年 Excel:
=MAXIFS(Time_Finished,Name,$A2)-MINIFS(Time_Started,Name,$A2)
在早期版本中,您需要输入一个与数组公式略有不同的公式。您可以通过按住 ctrl+shift
同时点击 enter
=MAX(IF($A2=Name,Time_Finished))- MIN(IF($A2=Name,Time_Started))
这将为您提供如下所示的输出:
然后您可以根据您的要求以多种方式按人分组。
支点 table 是你的朋友。我不确定您的 date/time 字段是如何格式化的,因此在我的屏幕截图中,我将 date/time 的开始和结束分为日期和时间字段。 旋转 table,其中包含名称以及开始和结束 date/time 标记。 行=名称 值 = 结束日期;时间结束;开始日期;开始时间 对于每个值,单击下拉列表和 select 'Field Value Settings'。 对于结束 date/time select 'Max' 值。 对于开始 date/time select 'Min' 值。 然后只需输入一个简单的公式,并将其格式化为时间。 Screenshot of excel pivot table showing setting