Excel VBA:指定したセル範囲に入力が合った場合、その入力内容を書き換える

Excel VBA

サンプルコード

Private Sub Worksheet_Change(ByVal Target As Range)
    
    If Not Target.CountLarge = 1 Then
    
        Exit Sub
    End If
    
    If Intersect(Target, Range("B2:B4")) Is Nothing Then
    
        Exit Sub
    End If
    
    Dim s As String
    s = Target.Value
    
    If Not Len(s) = 0 Then
    
        Dim re As Object
        Set re = CreateObject("VBScript.RegExp")
        
        With re
        
            .Pattern = "^(0?[0-9]{1}|1[0-9]{1}|2[0-3]{1}){1}[0-5]{1}[0-9]{1}$"    ' 検索パターンを設定
            .IgnoreCase = False                                                   ' 大文字と小文字を区別する
            .Global = True                                                        ' 文字列全体を検索
        End With
        
        If re.Test(s) Then
        
            Dim str_tmp_1 As String
            Dim str_tmp_2 As String
            Dim str_tmp_3 As String
            
            str_tmp_1 = Format(s, "0000")
            str_tmp_2 = Left(str_tmp_1, 2)
            str_tmp_3 = Right(str_tmp_1, 2)
            
            Application.EnableEvents = False
            
            Target.NumberFormatLocal = "@"
            Target.Value = str_tmp_2 & ":" & str_tmp_3
            
            Application.EnableEvents = True
        End If
    
        Set re = Nothing
    End If
End Sub

今回の場合は、あるワークシートのRange(“B2:B4”)において、入力の内容が時間をあらわす数字だった場合に00:00の文字列に書き換える。
例:900 → 09:00
標準モジュールではなく、実行させるワークシートにコードを記入する。

コメント

タイトルとURLをコピーしました