プロが教える店舗&オフィスのセキュリティ対策術

タイムスタンプで、以下の時刻を表す数値があります。

18.11.31.349827
18.11.32.046075

この差をワークシート上で求めたいと思います。
何か良い方法はありませんか?

A 回答 (3件)

18:11:31.349827 のように時刻形式で入力してしまうと、0.1ミリ秒の桁を


四捨五入した 18:11:31.350 でしか保存されないので困ってしまうわけですが、
秒の部分を切り離して 18:11 と31.349827にしておき、別のセルで
= 18:11 + 31.349827/(24*60*60)
とまとめてやると、ちゃんと計算できます。
    • good
    • 1

(1)18は時間、11は分、31は秒を表すとします。

349827は349827/1000000秒を表すとします。
(2)データとして、A1に18.11.31.349827、A2に18.11.32.046075が入っているものとします。
(3)VBAでワークセルとしてB,C,D,F列を使う。
Sub split()
For j = 1 To 2
Worksheets("sheet1").Cells(j, 1).Activate
a = ActiveCell
s = 1
For i = 1 To 4 '切り分けSplit
p = InStr(s, a, ".")
If p = 0 Then p = Len(a) + 1
ActiveCell.Offset(0, i) = Mid(a, s, p - s)
s = p + 1
Next i
Next j
'-------             ’各桁演算 
Dim k(5)
k(2) = 1: k(3) = 60: k(4) = 60: k(5) = 1000000
For i = 2 To 5
Cells(9, i) = Cells(8, i) - Cells(7, i)
If Cells(9, i) < 0 Then
Cells(9, i - 1) = Cells(9, i - 1) - 1
Cells(9, i) = Cells(9, i) + k(i)
End If
Next i
End Sub
(4) 結果は
(B) (C)  (D)   (E)
181131349827 (1行目)
18113246075  (2行目)
000696248  (3行目)
秒以下の入力は桁を揃えて後の0も付け加えてくださいね。.11--->.110000のように。
    • good
    • 0

質問の意図に合っているか不明ですが、ユーザー定義関数を作ってみました。


=TimeDif(時刻1,時刻2) として使います。
質問のケースは『 00.00.00.696248』が結果になります。
セルに時刻を表す文字列があれば、=TimeDif(A1,A2) のように使えます。


出力結果は文字列です。数値、時刻として再計算には使えません。
もう少し簡単に計算できそうな気もしますが・・・ご参考に。(当方Excel97です)


標準モジュールに貼り付けます。

Function TimeDif(strTM1 As String, strTM2 As String)
  Dim TM1 As String, TM2 As String   '時刻
  Dim hh1 As Integer, hh2 As Integer  '時(から、まで)
  Dim mm1 As Integer, mm2 As Integer  '分(から、まで)
  Dim ss1 As Integer, ss2 As Integer  '秒(から、まで)
  Dim pot As Integer           '『.』の位置
  Dim Dif As Double           '2つの時刻の秒差
  Dim Dif1 As String, Dif2 As String  '時分秒差と少数秒差
  Dim SeiFu As String          '正負

  TM1 = strTM1 '時刻1を時分秒に分解
    pot = InStr(TM1, "."): hh1 = Mid(TM1, 1, pot - 1): TM1 = Mid(TM1, pot + 1)
    pot = InStr(TM1, "."): mm1 = Mid(TM1, 1, pot - 1): TM1 = Mid(TM1, pot + 1)
    pot = InStr(TM1, "."): ss1 = Mid(TM1, 1, pot - 1): TM1 = Mid(TM1, pot)
  TM2 = strTM2 '時刻2を時分秒に分解
    pot = InStr(TM2, "."): hh2 = Mid(TM2, 1, pot - 1): TM2 = Mid(TM2, pot + 1)
    pot = InStr(TM2, "."): mm2 = Mid(TM2, 1, pot - 1): TM2 = Mid(TM2, pot + 1)
    pot = InStr(TM2, "."): ss2 = Mid(TM2, 1, pot - 1): TM2 = Mid(TM2, pot)

  '秒単位で差を計算
  Dif = (hh2 * 60# + mm2) * 60# + ss2 _
      - ((hh1 * 60# + mm1) * 60# + ss1) + Val(TM2) - Val(TM1)
  SeiFu = " ": If Dif < 0 Then SeiFu = "-": Dif = Abs(Dif)

  '時刻形式にした文字列を作る
  Dif1 = Format(Int(Dif) / 24 / 3600, "hh:mm:ss")
  Dif2 = Format(Dif - Int(Dif), ".000000")

  TimeDif = SeiFu & Application.Substitute(Dif1 & Dif2, ":", ".")
End Function
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています