以前、4桁の数字を時間に変換する勤怠シートを作成しましたが、わがままなスタッフからまた注文が。
今度は、1桁から4桁の数字を一括で時間に変換できるVBAはないのか?と。
さらに、選択したセル範囲の数値を時刻に変換できるのがいいと。
そこでこんなコードを書いてみました。
Sub 選択範囲を時刻に変換()
Dim cell As Range
Dim num As Variant
Dim hours As String
Dim minutes As String
Dim regex As Object
Set regex = CreateObject("VBScript.RegExp")
' 正規表現で "hh:mm" の形式をチェック
regex.Pattern = "^\d{1,2}:\d{2}$"
regex.IgnoreCase = True
' 選択範囲の各セルを処理
For Each cell In Selection
num = cell.Value
' すでに "hh:mm" の形式ならスキップ
If regex.Test(cell.Value) Then GoTo SkipCell
' 数値チェック
If IsNumeric(num) Then
Select Case Len(CStr(num))
Case 1
hours = "00"
minutes = "0" & num
Case 2
hours = "00"
minutes = Format(num, "00")
Case 3
hours = "0" & Left(num, 1)
minutes = Right(num, 2)
Case 4
hours = Left(num, 2)
minutes = Right(num, 2)
Case Else
' 5桁以上は処理しない
GoTo SkipCell
End Select
' hh:mm 形式に変換
cell.Value = hours & ":" & minutes
End If
SkipCell:
Next cell
' オブジェクトを解放
Set regex = Nothing
End Sub
実際に動かしてみるとこんな感じになります。

使う場面にもよりますが、あれば便利だなと作ってみて思いました。
よかったらコードをコピペして使ってみてください。

コメント