回答:
この関数は動作するはずです:
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 / Macrosを開き、ThisWorkbookの下に新しいモジュールを挿入します。コードを右側に貼り付けます。
データがセル内にあるA1
場合、セルB1
はでなければなりません=to_seconds(A1)
。
これは基本的にjcbermuの答えの非VBAバージョンです。Name Managerを開き、この式で名前を作成します。A1はデータの最初の行です。
=EVALUATE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(Sheet1!$A1,"d","*86400+"),"h","*3600+"),"m","*60+"),"s","*1+")&"0")
例えば、それに名前を付けeval
し、入力=eval
セルにダウン自動入力。
評価は、Excelの隠し関数で、名前マネージャーで定義されている場合にのみ機能します。通常、セルに数式を入力するだけでは機能しません。