時刻を入力するとき、テンキーから「:」の行き来が長いという話がありました。
そこで、ピリオドで代用するユーザー定義関数を作ってみました。
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」を入力するのが面倒だったので、省略できるようにしました。