我想添加 D6 和 D16,它们是:
但我不能添加它们,因为它们的格式不同。结果,我想以 [h]:mm 格式获得 22458:10。这该怎么做?
在第一个快照中,我看到公式栏显示了一个时间,而在第二个快照中,它显示了与单元格中相同的文本。这意味着在第一个表格上,您有格式化为自定义时间的数字,而在第二个表格上,您只有一个文本。
您需要一个将该文本转换为数字的公式,然后您可以使用该数字进行数学运算。
公式是这样的:
=(VALUE(LEFT(A1,FIND(":",A1)-1))*60+VALUE(MID(A1,FIND(":",A1)+1,2)))/24/60
我注意到 Excel 可以将两个数字相加并显示30000:00
,但如果您键入它,则无法将其识别为时间。计算值后,您可以将其复制并粘贴为值,因此该值将替换文本。
编辑1:
当用户在单元格中输入文本时,Excel 会分析文本并尝试使用与此类似的逻辑来猜测用户意图:
=
那么它是一个公式-
或分隔,/
那么它是一个日期:
则为时间这通常使用正则表达式来检查文本是否与定义数字、公式、日期或时间的模式匹配。
例如,Excel 使用正则表达式匹配 1 到 4 个数字,后跟一个冒号,然后是 1 到 2 个数字。与此匹配的 Python 正则表达式将是{1,4}\d\:{1,2}\d
.
当 Excel 猜测您要输入时间时,因为您输入的内容看起来像时间,它会计算您输入的天数,将单元格值设置为计算出的数字并将单元格格式设置为时间,这样您就可以看到您输入的内容. 例如,如果您键入6:00
,Excel 从午夜开始计算 6 小时,即一天的四分之一,因此它将单元格值设置为 0.25,并将格式设置为时间。如果您随后将单元格格式更改为数字,您将看到有 0.25。
将时间存储为数字允许在公式中使用它们,如果将它们存储为文本,这是不可能的。
您的问题是,一个 Excel 人员决定,当用户键入时1234:12
,用户打算写一个时间,但是当用户键入时,12345:12
用户打算只写一个文本。
因此,您可以将该文本转换为数字,然后将时间格式设置为单元格。
您可以使用上面的公式(虽然很长,但很简单),或者使用每次修改单元格时触发的 VBA 宏,并在文本匹配时执行此操作12345:12
,或者使用检查所有单元格的宏一个文件,或者使用导入文件时执行此操作的宏,或者......你明白了。
编辑2:
这是一个函数,它转换所有带有 5 或 6 个数字后跟冒号后跟 2 个数字的文本:
Sub ConvertTimesWith5Or6Digits()
Dim C As Range, Text As String, Hours As String, Minutes As String, PosColon As Integer
For Each C In Sheet1.UsedRange.SpecialCells(xlCellTypeConstants).Cells
If C.Value2 Like "#####:##" Or C.Value2 Like "######:##" Then
Text = C.Value2
PosColon = InStr(Text, ":")
Hours = Left(Text, PosColon - 1)
Minutes = Mid(Text, PosColon + 1)
C.Formula = (Val(Hours) * 60 + Val(Minutes)) / 24 / 60
C.NumberFormat = "[h]:mm"
End If
Next C
End Sub