0

我想添加 D6 和 D16,它们是:

在此处输入图像描述

在此处输入图像描述

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

4

1 回答 1

3

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

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

公式是这样的:

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

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

编辑1:

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

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

这通常使用正则表达式来检查文本是否与定义数字、公式、日期或时间的模式匹配。

例如,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
于 2013-08-05T14:31:19.697 回答