【问题标题】:Parsing seconds from mm.ss.00 string从 mm.ss.00 字符串解析秒
【发布时间】:2015-09-01 08:05:52
【问题描述】:

我有很多mm.ss.00形式的经过时间记录。例如,如果经过时间为1min 44.72sec,则数据变为1.44.72。我想将这些数据转换成纯秒数据。让我举几个例子:

|mm.ss.00        |seconds        |
|:--------------:|:-------------:|
|1.44.72         |104.72
|2.5.32          |125.32
|0.59.12         |59.12

我可以保证时间记录永远不会超过 59 分 59.99 秒,因此您可以轻松假设第一个点 (.) 之前的 1 或 2 位数字必须是分钟。

【问题讨论】:

  • 不清楚你的数据目前是什么格式,以及你想转换成什么格式。更多示例可能会有所帮助。例如,如果数据是 1 分 3 秒,则当前显示为“1min 3.00sec”或“1min 03.00sec”或“1min 3sec”。然后解释您希望它如何显示(1.03.00' 或 '1.3' 或...?)
  • @PaulG 我添加了更多示例。谢谢
  • @pnuts 它有效!非常感谢。
  • @pnuts 你能注册你的答案吗?我想采纳你的答案。

标签: string excel time excel-formula vba


【解决方案1】:

请尝试:

=RIGHT(A1,LEN(A1)-FIND(".",A1))+60*LEFT(A1,FIND(".",A1))  

这会将1.44.72 之类的字符串视为字符串,并对其进行操作以去除数字字符,直至并包括第一个句号(美国的句点)。如果要忽略分钟,则可能不需要加号和加号之后的部分,因为它将第一个句号(分钟)之前的数字转换为秒,并将其添加到从第一部分开始的秒和百分之一秒公式。

加法过程将字符串操作的文本结果转换为数字格式,尽管这可以通过其他方式实现秒和百分之几秒。

【讨论】:

  • 我总是建议尽可能避免硬字符串操作,它通常比其他选项更“脆弱”且更难维护.. ;)
【解决方案2】:

选择您要转换的单元格并运行这个简短的宏:

Sub Fixer()
    Dim r As Range, N As Long
    For Each r In Selection
        ary = Split(r.Text, ".")
        If UBound(ary) = 2 Then
            r.Clear
            r.Value = CLng(ary(1))
        End If
    Next r
End Sub

编辑#1:

这是一个 VBA 宏。宏非常易于安装和使用:

  1. ALT-F11 调出 VBE 窗口
  2. ALT-I ALT-M 打开一个新模块
  3. 粘贴内容并关闭 VBE 窗口

如果您保存工作簿,宏将与它一起保存。 如果您使用的是 2003 年以后的 Excel 版本,则必须保存 文件为 .xlsm 而不是 .xlsx

要删除宏:

  1. 如上所示打开 VBE 窗口
  2. 清除代码
  3. 关闭 VBE 窗口

要使用 Excel 中的宏:

  1. ALT-F8
  2. 选择宏
  3. 触摸运行

要了解有关宏的更多信息,请参阅:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

必须启用宏才能正常工作!

编辑#2

根据您更新的帖子,这是更新后的宏:

Sub Fixer()
    Dim r As Range
    For Each r In Selection
        ary = Split(r.Text, ".")
        If UBound(ary) = 2 Then
            r.Clear
            r.Value = 60 * CDbl(ary(0)) + CDbl((ary(1) & "." & ary(2)))
        End If
    Next r
End Sub

【讨论】:

  • 对不起,我对VB一无所知。是VB吗?
  • @JaeJunLEE 查看我的EDIT#1
  • @pnuts 我将匹配 VBA 以满足 要求。
  • 有趣的是,然而,使用 VBA 似乎有点“矫枉过正”? ;) 也许那只是我,虽然..大声笑
  • @Ditto 如果您想在没有帮助列的情况下“就地”转换,我会使用 VBA。
【解决方案3】:

这应该可行:

=TIMEVALUE(SUBSTITUTE(SUBSTITUTE(A1,"min ",":"),"sec",""))*24*60*60

1) 使用 Substitute 删除“min”和“sec”文本,它是“无用的”,只是碍事。此外,在第一个空白处添加 : 以帮助 Excel 理解格式。 2) 转换为内部 Excel 日期/时间代码/值。 3) 将 my 24(一天 24 小时)*60(一小时 60 分钟)*60(一分钟 60 秒)乘以得到所涉及的秒数。

** 抱歉,我误读了输入格式..

以上假设数据像“1min 44.72sec”一样进入.. 如果数据只是“1.44.72”.. 改用这个:

=TIMEVALUE(SUBSTITUTE(B1,".",":",1))*24*60*60

类似的思路,将第一个句点转换为冒号,再转换为内部Excel时间,再转换为秒。 ;)

【讨论】:

  • ?嗯,哦..有点误读了这个问题:)然后不需要替代品..哈哈
  • 不,问题很清楚,我只是误读了他的输入格式 :) 我已经编辑了我的答案以包括两者.. ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多