我是时间记录很多事情,我想计算不同事物的关系和倾向。我已经导出了我的日志文件,并在excel中打开了它。一个简单的版本看起来像这样:
在实际工作表中,我有40多个任务和50多个日期。我希望能够对这些数据进行一些计算。但Excel并不“知道它是什么”(持续时间),因此无法添加或执行任何操作。
所以有一个问题是,如何让Excel知道,这是持续时间?我试着做this question建议的事情。但是当我将单元格格式化为[h]:mm
时,它会给我这个错误:
仅供参考:在大表中,那么有很多次,所以总数达到了633:33
的范围。
我希望能够进行简单的计算,例如:
=SUM(B1, C4, D5)
或
=SUM(B1, C4, D5)/COUNT(B1, C4, D5)
也许还可以制作一些图表和图表。
我所做的另一项尝试是尝试让所有单元格的格式为hh.mm
,而不是hh:mm
,但这给了我一些问题。我的方法是:
:
简单地“全部替换”为.
633:33
变为633.36.00
(即使单元格是'文本'单元格)。 633.36.00
变为27/01/1900 15.36.00
......到底怎么回事!?我需要一个程序,不要求我浏览所有数以千计的数字并编辑其中的任何数字(或确保Excel已将数字转换成飞行的独角兽。EDIT1
Here's an example我在Google表格中处理的总表单。
EDIT2
如果我将单元格格式化为[h]:mm
,那么我会收到错误(参见上文)。但是,如果我将其格式化为[t]:mm
,那么我不会收到错误(感谢Axel Richter指出这一点)。它可能与我的Excel安装的初始语言(丹麦语)有关。
但是......如果我尝试总结一堆单元格,在对所有内容进行格式化之后,它总计为0:00
。
如果我将所有单元格格式化为Time(很清楚它是错误的格式,但希望Excel可以看到并修复它) - 然后尝试总结几个单元格,那么它总计为{ {1}}(即使它不是空单元格)。
同样重要的是,当我总结一些数字时,我是从一个通用单元格中做到的 - 或者Excel知道,如果我从00.00.00
- 符号开始,它将会是计算(因此单元格格无关紧要)?
答案 0 :(得分:1)
Excel
将以下列形式将日期时间值存储为浮点双精度值:
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的日期。但是,如果您仅使用hh:mm
将这些值格式化为时间,则仅显示时间。日期只是隐藏。
例如,使用1.25
格式化的hh:mm
会显示06:00
,但它是1 1/4天01/01/1900 06:00:00
。要查看多天的小时数,可以使用格式[h]:mm
。例如,使用1.25
格式化的[h]:mm
将显示30:00
,即1天(24:00
)+ 1/4天(06:00
)。
虽然Excel
将独立于区域设置执行此操作,但用户定义的格式代码以及Excel
将作为时间值采用的输入值类型取决于区域设置。
例如,您的语言环境丹麦语(格陵兰岛)的格式代码不同。请参阅Formatere tal som datoer eller klokkeslæt 。
因此,您的格式代码将为[t]:mm
而不是[h]:mm
。
此外,您的语言区域丹麦语(格陵兰岛)的时间分隔符为.
,而不是:
。因此,Excel
将采用时间值123.45
(123小时45分钟)而不是123:45
的值。
在你的上一条评论中,你会说:“之后它看起来很奇怪,例如:123:45
而不是123.45
”。是的,因为您的用户定义格式[t]:mm
也包含时间分隔符:
。但这与您的语言环境设置不同,.
是时间分隔符。虽然输入值Excel
会考虑区域设置,因此需要123.45
作为123小时45分钟的时间值。但是,在输入Excel
应用格式设置[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
。
答案 1 :(得分:0)
我无法编辑工作表,因此我copied it。正如您在专栏AS
和行43
中看到的那样,Google提供了#duration;#39;格式。你不必操纵某些东西。只需更改单元格格式即可。
在Excel中,持续时间格式为[h]:mm
。在单元格中点击ctrl
+ 1
,然后选择Custom
并在[h]:mm
键入Type
并点击enter
。
如果SO答案太难理解,请尝试this。
答案 2 :(得分:0)
我提前道歉这是多么粗糙,但我主要是把这些代码打包在一起以适应任务,并且不想浪费时间在它上面。但是原则是存在的,所以至少它应该指向你需要前进的方向。
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
同样,这主要是工作的模型,但需要根据您的需要进行调整。
答案 3 :(得分:0)
Zeth,我下载了你的文件,我可以用你的时间数据做一些计算。我选择了具有持续时间的所有单元格,并将单元格的格式更改为" time"。看起来你应该改变所有单元格格式,包括空单元格。
如果不起作用,请找到"更多格式的数字"吃了数字"数字"菜单。然后,选择选项" Hour"并选择最接近数据格式的格式。同时注意选项" locality"在这个菜单的底部。小时格式选项取决于所选区域。 (世界上每个地区都有一些关于它的召集,而且Excel会在很大程度上重新协调。
答案 4 :(得分:0)
格式化数字不会改变Excel执行计算的方式。
因此,格式化为时间且显示01:28:00的单元格(c3)实际上包含0.061111,因为Excel将时间视为24小时日的分数。
当你加起来很多次并且他们加起来超过24小时时,基础数字超过1天,所以你得到小数点前的天数和小数点后的剩余24小时的分数。 />因此,要将持续时间或时间转换为小时,您只需将其乘以24并将其格式化为数字或一般(小数点后面的数字是一小时的分数)。
如果您只想格式化小时和分钟的结果使用格式[h]:mm并且不要乘以24 - 在您的系统上查看格式单元格 - 自定义以查看相应的[h:mm]是什么。