3

以下の例のように、時間がテキストでフォーマットされた Excel テーブルがあります。時間をテキスト文字列から使用可能な形式に変換する必要があります。すべてを同じ形式のIEすべてで数秒で取得して、そこから作業できれば幸いです。ヘルパー列と非常に長い醜いIF左、右、中式を使用してこれを行うことができ、すべてを分割できることはわかっていますが、毎日何千ものこれらを扱っており、これらを作成した動的な式またはVBscriptを使用してより適切に自動化したいと考えていますより簡単に作業できます。

     A         B
1 Server(A)  15d 3h 39m
2 Server(E)  3h 36m 44s
3 Server(C)  4m 3s
4 Server(B)  44s
4

2 に答える 2

1

これはエレガントではありませんが、形式が次のようになっている限り、UDF として機能します。

Public Function timeStringToSeconds(strIn As String) As Long
    Dim values
    values = Split(strIn, " ")
    For Each v In values
        Select Case Right$(v, 1)
            Case "d"
                timeStringToSeconds = timeStringToSeconds + CLng(Left$(v, Len(v) - 1)) * 86400
            Case "h"
                timeStringToSeconds = timeStringToSeconds + CLng(Left$(v, Len(v) - 1)) * 3600
            Case "m"
                timeStringToSeconds = timeStringToSeconds + CLng(Left$(v, Len(v) - 1)) * 60
            Case "s"
                timeStringToSeconds = timeStringToSeconds + CLng(Left$(v, Len(v) - 1))
        End Select
    Next
End Function

これを行うだけで簡単に使用できます。たとえば、C1 で:timeStringToSeconds(B1) または、次のようにして範囲で実行します。 range.value = timeStringToSeconds(range.value)

于 2012-12-14T19:29:22.267 に答える
0

文字列をdd:hh:mm:ss のような使用可能な形式にするもう 1 つの醜い方法です。もちろん、数秒しか必要ない場合は、それを即興で行うこともできます ;)

試着したらコメントください。この種の状況を、区切り文字として扱うマルチ区切り分割結合:)と呼びますd, h, m, ssplit関数とを使用したソリューションもあり得ます。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))
    

出力:

ここに画像の説明を入力

于 2012-12-14T22:34:33.487 に答える