朧の.Netの足跡
問合せ先:support@oborodukiyo.info サイト内検索はこちら
エクセルVBA 何時間何分何秒を計算できるようにする





アンケートや勤怠などで、何時間何分したかを書いてあるのがあります。
このままだと計算できないので、変換するマクロを作りました。
例えば27時間2分30秒なら、27:02:30という具合に右隣りのセルに書き込みます。
書式設定もします。



Option Explicit
Public Sub countTime()
    Dim idxHour As Integer
    Dim idxMinute As Integer
    Dim idxSecond As Integer
    Dim h As String
    Dim m As String
    Dim s As String
    Dim ws As Worksheet
    Dim rowStart As Integer
    Dim rowEnd As Integer
    Dim col As Integer
    Dim cel As Range
    Dim i As Integer
    Dim j As Integer
    Dim r As String
    
    '現在のワークシートを取得
    Set ws = ActiveSheet
    'アクティブなセルから開始するので取得
    Set cel = ActiveCell
    'セル範囲を把握するために行と列番号を取得
    col = cel.Column
    rowStart = cel.Row
    
    With ws
        'アクティブセルのある列の一番最後のデータ位置を取得
        rowEnd = .Cells(.Rows.Count, col).End(xlUp).Row
        '行の番号でループする
        For i = rowStart To rowEnd
            'ここでは、例として、17時間20分3秒という感じのデータを想定。
            '但し、時間、分、秒のどれかの部分がなくても大丈夫
            '例えば2時間40秒というのもOK
            '以下がメインの処理
            idxHour = InStr(.Cells(i, col), "時間")
            idxMinute = InStr(.Cells(i, col), "分")
            idxSecond = InStr(.Cells(i, col), "秒")
            
            If idxHour > 0 Then
                h = Left(.Cells(i, col), idxHour - 1)
            Else
                h = "0"
            End If
            
            If idxMinute > 0 And idxHour > 0 Then
                m = Mid(.Cells(i, col), idxHour + 2, idxMinute - (idxHour + 2))
            ElseIf idxMinute > 0 Then
                m = Left(.Cells(i, col), idxMinute - 1)
            Else
                m = "0"
            End If
            
            If idxSecond > 0 Then
                If idxMinute > 0 Then
                    s = Mid(.Cells(i, col), idxMinute + 1, idxSecond - (idxMinute + 1))
                ElseIf idxHour > 0 Then
                    s = Mid(.Cells(i, col), idxHour + 2, idxSecond - (idxHour + 2))
                Else
                    s = Left(.Cells(i, col), idxSecond - 1)
                End If
            Else
                s = "0"
            End If
            '結果を文字列連携で作成
            r = h & ":" & m & ":" & s
            '右隣のセルに書き込む
            .Cells(i, col + 1) = r
            '23時を超えて表示できるように書式設定をする
            .Cells(i, col + 1).NumberFormatLocal = "[h]:mm:ss"
        
        Next i
        
    End With
    
End Sub

        








良いやや良い普通やや悪い悪い

投稿日時評価コメント