处理Excel中的TimeRecording文件(格式化单元格)

Excel对单元格的假设令我困惑不解。 我正在使用Office 365 – 适用于Mac的Excel版本15.28。

我是很多事情的时间logging,我想计算关于不同事物的关系和倾向。 我导出了我的日志文件,并在Excel中打开它。 一个简单的版本是这样的:

在这里输入图像说明

在真正的工作表中,我有40多个任务和50多个date。 我希望能够对这些数据做一些计算。 但Excel不知道它是什么(时间),因此不能将它们添加或做任何事情。

所以有一个问题,如何让Excel知道,这是持续时间? 我试着做这个问题的build议。 但是,当我格式的单元格为[h]:mm那么它给了我这个错误:

在这里输入图像说明

供参考:在大的表中,有很多次,所以总数达到了633:33

我只想做一些简单的计算,比如:

 =SUM(B1, C4, D5) 

要么

 =SUM(B1, C4, D5)/COUNT(B1, C4, D5) 

也许还可以制作一些图表和图表。

我做的另一个尝试是试图让所有的单元格格式hh.mm而不是hh:mm ,但是这给了我一些问题。 我的做法是这样的:

  • 将所有单元格转换为“文本”以告诉Excel:“嘿…不要在这里做任何自动转换/猜测,也不要将任何单元格转换为date或小数或折纸天鹅!
  • 之后,我做了一个简单的“全部replace” : .
  • 但在“全部replace”之后, 633:33变为633.36.00 (即使该单元格是“文本”单元格)。
  • 如果我只是双击单元格进行编辑,那么数字“神奇”从633.36.00变成27/01/1900 15.36.00 …到底是什么! 我需要一个程序,不需要我浏览所有的数千个数字并编辑它们中的任何一个(或者确保Excel将数字转化为独angular兽。

EDIT1

以下是我在Google表格中工作的总表的示例 。

EDIT2

如果我将单元格格式化为[h]:mm ,那么会出现错误(请参阅上文)。 但是,如果我把它的格式设置为[t]:mm ,那么我就不会出现错误(感谢Axel Richter指出了这一点)。 这可能与我的Excel安装(丹麦语)的初始语言有关。 但是,如果我然后尝试总结一堆细胞,做完这一切的格式,然后它总结到0:00

如果我将所有单元格格式化为Time(知道这是错误的格式,但希望Excel能够看到并修复它),然后尝试总结几个单元格,则总计为00.00.00 (即使它不是空单元格)。

当我总结一些数字时,我是从一个通用单元格中完成的 – 还是Excel知道的,如果我以= -sign开始,那么它将会是一个计算(因此单元格格式不重要)?

Excel将按以下forms将date时间值存储为浮点双精度值:

1天= 1

1小时= 1/24 = 0.0416666666666667

1分钟= 1/24/60 = 0.000694444444444444

如此格式化所有大于或等于0但小于1的值将从00:00到23:59。 大于1的值将是1 = 01/01/1900 00:00:00的date。 但是,如果您仅使用hh:mm格式化诸如时间这样的值,则仅显示时间。 date只是隐藏。

例如,使用hh:mm格式化的1.25将显示06:00尽pipe它是01/01/1900 06:00:00 06:00 ,即01/01/1900 06:00:00 。 要查看多天的小时数,可以使用格式[h]:mm 。 例如用[h]:mm格式化的1.25将显示30:00 ,即1天( 24:00 )+ 1/4天( 06:00 )。

尽pipeExcel将独立于区域设置执行此操作,但是用户定义的格式代码以及Excel将用作时间值的input值types取决于区域设置。

例如您的语言环境丹麦语(格陵兰)格式代码是不同的。 见Formatere tal som datoer ellerklokkeslæt 。

所以你的格式代码将是[t]:mm而不是[h]:mm

丹麦语(格陵兰)的时间分隔符也是. 代替: 。 所以Excel时间值是123.45 (123小时45分钟),而不是123:45

在你的最后一个评论中你说:“之后它看起来很奇怪,例如: 123:45而不是123.45 ”。 是的,这是因为你的用户定义格式[t]:mm包含时间分隔符:也。 但是这与您的区域设置不同. 是时间分隔符。 input值时, Excel遵守语言环境设置,所以期望123.45作为123小时45分钟的时间值。 但是在inputExcel应用单元格格式[t]:mm显示123:45

在你最后的评论中,你说17:24 * 24等于417:36会让你感到困惑。 但是,这正是它应该的。

17:24是17小时24分。 乘以24是17小时* 24 = 408小时和24分钟* 24 = 576分钟。 576分钟是9小时36分钟。 所以我们得到(408小时+ 9小时)和36分钟= 417小时36分钟= 417:36

我无法编辑表单,所以我复制了它 。 正如您在列AS和第43行中看到的,Google提供了“持续时间”格式。 你不必操纵一些东西。 只要改变单元格格式。 在这里输入图像说明

在Excel中,持续时间格式为[h]:mm 。 在单元格中按ctrl + 1并selectCustom然后在types中键入[h]:mm ,然后按enter 。 如果答案太难以遵循,试试这个 。

我提前道歉,这是多么的粗糙,但我主要把这些代码放在一起,以适应任务,不想浪费时间。 原则在那里,所以至less应该指出你需要去的方向。

 Sub Time_Summarization() Dim i As Long Dim j As Long Dim cell As Range Dim sHolder As String Dim vHolder As Variant Dim arrHolder() As Double Dim bAdd As Boolean Dim dHolder_Whole As Double Dim dHolder_Remainder As Double Dim sOutput As String ReDim arrHolder(0 To 2) ' Use a set range. Selection here is just for testing ' Ideally there should be data validation in this loop to ensure that the input ' values are numeric time values. For Each cell In Selection ' Convert the cell value to a date to permit splitting. ' The value is then split into a 1-d array with 3 positions (H, M, S) vHolder = Split(CDate(cell.value), ":") ' Loop through the split values from first to last, and trim off the AM/PM. ' If it is a PM date, set the flag to add 12 (13:00:00 gets displayed as 1:00:00 PM) For j = LBound(vHolder) To UBound(vHolder) ' If PM, set the flag. If InStr(vHolder(j), "PM") Then bAdd = True ' Remove "AM" and "PM" vHolder(j) = Replace(vHolder(j), " AM", vbNullString) vHolder(j) = Replace(vHolder(j), " PM", vbNullString) ' Add the values into the array in the same order. arrHolder(j) = arrHolder(j) + vHolder(j) Next ' Add 12 hours if needed If bAdd Then arrHolder(0) = arrHolder(0) + 12 ' Reset the flag for the next loop bAdd = False Next ' Step backwards through the array to round up increments of 60. For i = UBound(arrHolder) To LBound(arrHolder) + 1 Step -1 ' This will return the number of times the value goes into 60. dHolder_Whole = arrHolder(i) \ 60 ' This will return the remainder of the value divided by 60. dHolder_Remainder = arrHolder(i) Mod 60 ' Round up seconds to minutes, and minutes to hours. arrHolder(i - 1) = arrHolder(i - 1) + dHolder_Whole ' Overwrite the remainder arrHolder(i) = dHolder_Remainder Next ' Combine the separate values into a string. sHolder = arrHolder(0) & ":" & arrHolder(1) & ":" & arrHolder(2) ' Just for testing, do with the values whatever you wish. Debug.Print sHolder End Sub 

再次,这主要是一个模型,将工作 ,但将需要适应您的需要。

Zeth,我下载了你的文件,我可以用你的时间数据做一些计算。 我select了所有具有持续时间的单元格,并将单元格的格式更改为“时间”。 看来你应该改变所有的单元格格式,包括空单元格。

如果它不起作用,find“更多的数字格式”吃“数字”菜单。 然后,select选项“小时”并select最接近数据格式的格式。 也请注意菜单底部的选项“位置”。 小时格式选项取消select的区域。 (世界上的每个地区都有一些关于它的传统,而Excel则在那个时候进行重新调整。

格式化数字不会改变Excel进行计算的方式。
因此,格式为时间并显示01:28:00的单元格(c3)实际上包含0.061111,因为Excel会将时间视为24小时制的一小部分。
当你加起来很多次,他们加起来超过24小时的基础数是超过1天,所以你得到小数点前几天,小数点后是剩余24小时的一小部分。
因此,要将持续时间或时间转换为小时,只需将其乘以24,然后将其格式化为数字或常规(小数点后的数字为小时的小数)。
如果您只想将结果格式化为小时和分钟,请使用[h]:mm的格式,不要乘以24 – 在您的系统上查看格式单元格 – 自定义以查看[h:mm]的等效值。