時刻の簡易入力

時刻を入力するとき、テンキーから「:」の行き来が長いという話がありました。
そこで、ピリオドで代用するユーザー定義関数を作ってみました。

Public Function ToTime(val As Double) As Date
    Dim seq As Variant
        seq = Split(val, ".")
        If UBound(seq) = 1 Then
            If Len(seq(1)) = 1 Then
                seq(1) = seq(1) * 10
            End If
            ToTime = TimeSerial(seq(0), seq(1), 0)
        Else
            ToTime = TimeSerial(val, 0, 0)
        End If
End Function

"1.10"と入力した場合、末尾の0が自動で削除され、1時1分に置き換わってしまいます。そこで決めごととして、以下の条件付きになっています。

  • 1.1 ⇒ 1時10分
  • 1.01⇒ 1時01分

でも、やはり1.5は1.5時であって、1時30分ではないか?という感覚がどこかにあって居心地が悪い。そこで、次の通り作り直しました。

  • 1.5 ⇒ 1時30分
  • 1..5 ⇒ 1時5分
  • 1..50 ⇒ 1時50分
Public Function ToTime(val As Variant) As Date
    Dim seq As Variant
        seq = Split(val, ".")
        Select Case UBound(seq)
            Case 2
                seq = Split(val, "..")
                If seq(0) = "" Then seq(0) = 0
                ToTime = TimeSerial(seq(0), seq(1), 0)
            Case 1
                ToTime = TimeSerial(seq(0), seq(1) * 60 / (10 ^ (Len(seq(1)))), 0)
            Case 0
                ToTime = TimeSerial(val, 0, 0)
        End Select
        ToTime = Date + ToTime
End Function

時刻を入力するセルや列などの範囲が決まっていて、都度の入力が面倒な場合、Worksheet のChangeイベントなどと絡めて使用したら便利かも。

参考まで。

追記~ 2018.8.6

実際に使ってみたところ、「1.5」が「6:00」になってしまう不具合がありました。
現在は修正済みです。

追記~ 2018.8.7

実際に使ってみたところ、最初の「0」を入力するのが面倒だったので、省略できるようにしました。