文字列をdd:hh:mm:ss のような使用可能な形式にするもう 1 つの醜い方法です。もちろん、数秒しか必要ない場合は、それを即興で行うこともできます ;)
試着したらコメントください。この種の状況を、区切り文字として扱うマルチ区切り分割結合:)と呼びますd, h, m, s
。split
関数とを使用したソリューションもあり得ます。regexp
日:時:分:秒
コード:
Function multiSplitCombine(ByVal strTime As String) As String
Dim delimsArray(0 To 3) As Variant
Dim i As Long, j As Long, k As Long
'set delimiters
delimsArray(0) = "d"
delimsArray(1) = "h"
delimsArray(2) = "m"
delimsArray(3) = "s"
If Len(strTime) = 0 Then
multiSplitCombine = "00:00:00:00"
Exit Function
End If
For i = LBound(delimsArray) To UBound(delimsArray)
'-- get the position of the delimiter
j = InStr(1, strTime, delimsArray(i))
'-- if the delimiter is not found
If j = 0 Then
'-- insert 00: into the position after earlier previous delimiter replacement
strTime = Left(strTime, k) & "00:" & Right(strTime, Len(strTime) - k)
Else
k = j
'-- replace delimiter with semicolon
strTime = Replace(strTime, delimsArray(i), ":")
End If
Next i
'-- strip that last extra semi colon
strTime = Trim(Left(strTime, Len(strTime) - 1))
'-- remove internal white spaces
strTime = Replace(strTime, " ", "")
'-- back to sheet
multiSplitCombine = Application.WorksheetFunction.Text(strTime, "dd:hh:mm:ss")
End Function
すぐに
ここで、上記のコードで変更する必要があるのは、
- 関数名をに変更
splitToSeconds
strTime = Replace(strTime," ", "")
次のコードを追加して、後のすべてを置き換えます
'-- dd:hh:mm:ss format
strTime = Application.WorksheetFunction.Text(strTime, "dd:hh:mm:ss")
'-- split by semicolon
s = Split(strTime, ":")
'-- it has to be 4 elements since the format we insert is d:h:m:s
splitToSeconds = CDbl(s(0)) * 24 * 60 * 60 + _
CDbl(s(1)) * 60 * 60 + CDbl(s(2)) * 60 + CDbl(s(3))
出力: