期間文字列をExcelの秒に変換する


1

アプリケーションから次の形式で出力される一連のデータがあります。

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 / Macrosを開き、ThisWorkbookの下に新しいモジュールを挿入します。コードを右側に貼り付けます。

データがセル内にあるA1場合、セルB1はでなければなりません=to_seconds(A1)


これは完璧です。ありがとうございます。私は少し助けてそこに着くことができて幸せでしたが、今では思ったよりも少し時間がかかったかもしれない解決策を見てきました。
Drifter104

あなたがPHPとPythonを知っているので、あなたは私が何をしたかを理解し、この機能を改善することができます。
jcbermu

私はphpとpythonを知っていると主張できるとは思わない。この場合、文字列を分割するなど、特定のことができます。確かに、特定のコードを最適化するのに十分な知識がない
-Drifter104

1

これは基本的にjcbermuの答えの非VBAバージョンです。Name Managerを開き、この式で名前を作成します。A1はデータの最初の行です。

=EVALUATE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(Sheet1!$A1,"d","*86400+"),"h","*3600+"),"m","*60+"),"s","*1+")&"0")

例えば、それに名前を付けevalし、入力=evalセルにダウン自動入力。

評価は、Excelの隠し関数で、名前マネージャーで定義されている場合にのみ機能します。通常、セルに数式を入力するだけでは機能しません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.