如何添加两种不同格式的时间值

时间:2013-08-05 13:21:03

标签: excel time format add

我想添加D6和D16:

enter image description here

enter image description here

但我不能添加它们,因为它们的格式不同。我想以[h]:mm格式得到22458:10。怎么做?

1 个答案:

答案 0 :(得分:3)

在第一个快照上,我看到公式栏显示时间,而在第二个快照上,它显示与单元格中相同的文本。这意味着在第一个表格中,您将数字格式化为自定义时间,在第二个表格上您只有一个文本。

您需要一个将该文本转换为数字的公式,然后您可以使用该数字进行数学运算。

公式如下:

=(VALUE(LEFT(A1,FIND(":",A1)-1))*60+VALUE(MID(A1,FIND(":",A1)+1,2)))/24/60

我注意到Excel可以添加两个数字并显示30000:00,但如果您输入它就无法将其识别为时间。计算完值后,您可以将其复制并粘贴为值,因此该值将替换文本。

编辑1:

当用户在单元格中输入文本时,Excel会分析文本并尝试使用与此类似的逻辑来猜测用户意图:

  • 如果所有字符都是数字,那么它就是数字
  • 如果第一个字符是=,那么它就是公式
  • 如果有两组或三组数字由-/分隔,那么它就是一个日期
  • 如果有2或3组数字由:分隔,则为时间

通常使用regular expressions来检查文本是否与定义数字,公式,日期或时间的模式匹配。

例如,看起来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