我有一系列从应用程序输出的数据,格式如下。
8d 21h 33m
30s
6m 32s
1m 40s
54m 6s
11m 32s
5d 3h 34m
30s
7m 40s
19h 57m 49s
1h 36m 9s
1m 3s
5m 11s
19m 39s
我想在 excel 中将其显示为下一列中的秒数。如果我在 php 或 python 中执行此操作,我可以按每个字母 (h 和 m) 拆分字符串,但我不知道如何在 excel 中执行此操作。有人能给我指出正确的方向吗?
答案1
该功能应该可以工作:
Public Function to_seconds(data As String)
Dim LArray() As String
LArray = Split(data)
total_time = 0
For i = 0 To UBound(LArray)
m = LArray(i)
If m <> "" Then
q = Right(m, 1)
tt = Left(m, Len(m) - 1)
ta = 0
Select Case q
Case "d"
ta = 86400
Case "h"
ta = 3600
Case "m"
ta = 60
Case "s"
ta = 1
End Select
If IsNumeric(tt) Then
total_time = total_time + (Int(tt) * ta)
End If
End If
Next i
to_seconds = total_time
End Function
使用 ALT+ F11 及以下打开 VBA /宏本工作簿插入新模块。将代码粘贴到右侧。
如果您的数据在单元格中,A1
则单元格B1
必须是=to_seconds(A1)
。
答案2
这基本上是 jcbermu 答案的非 VBA 版本。打开名称管理器并使用此公式创建名称,其中 A1 是数据的第一行。
=EVALUATE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(Sheet1!$A1,"d","*86400+"),"h","*3600+"),"m","*60+"),"s","*1+")&"0")
例如,给它起一个名字,eval
然后输入=eval
到一个单元格中并自动填充。
Evaluate 是 Excel 中的一个隐藏函数,只有在名称管理器中定义时才有效。简单地将公式输入单元格通常不起作用。