【VBA】勤怠管理データのチェック

とある企業の勤怠管理情報のチェックを行うプログラム。
問題のある部分に色を付けるだけのプログラムだが基本的な要素が詰まっているのでシェア。
ポイントはコメント行による。


```vb:勤怠管理データのチェック
Sub kinmuCheck()
    'Debug.Printは必修のコマンド。イミディエイトウインドウ（VBE内の機能）に現在の変数の値などを表示することができる。 
    Debug.Print "=== 処理開始==="

    Dim i As Integer
    i = 1
    Dim n As Integer 'データの行数
    
    Do While Cells(i, 1) <> ""  'Do While〜Loop構文
        i = i + 1
    Loop
    n = i - 1
    
     Debug.Print "読込データの行数：" & n
     
    ' チェックカラーの設定 =>checkColorの変数値を変更する
    Dim checkColor As String
    checkColor = vbCyan  'vbRed, vbBlue, vbGreen, vbMagenta, vbCyan, vbYellow
    '色変数（vbYellow）は文字列（String）扱い。でもダブルコーテーション（”）は不要。

    For i = 2 To n
    'Callステートメントの例。メインルーチンから渡す値が括弧内に入っている。
        Call sigyoCheck(i, checkColor)
    
        Call nyukanCheck(i, checkColor)
   
        Call logOnCheck(i, checkColor)
        
        Call logOffCheck(i, checkColor)
   
        Call taikanCheck(i, checkColor)
   
        Debug.Print i & " 行目の処理完了"
        
    Next i

End Sub

'サブルーチンの例。引数として欲しい値を括弧内に記述。エラーを避けるため変数型を指定しておくとよい。
Sub sigyoCheck(i As Integer, checkColor As String)
    
        ' 空欄と文字（スペース記号含む）のスキップ
        If Cells(i, 16).Value = "" Then
            GoTo Continue   'ループ処理を抜けるための処理。後の行にあるContinue:とセットになっている。
        ElseIf TypeName(Cells(i, 16).Value) = "String" Then
       'TypeName()は値の型を確認するコマンド。
            GoTo Continue
        End If
        
        '   始業時刻の取得
        Dim shigyo As Date
        shigyo = Cells(i, 16).Value
        
        '  分の取得
        Dim mm As Integer
        mm = Minute(shigyo)
        'Minute()はDate型の数値から「分」の値を抜き出すコマンド

        If mm Mod 10 <> 0 Then
            Cells(i, 16).Interior.Color = checkColor
        End If
    
Continue:

End Sub

Sub nyukanCheck(i, checkColor)

        ' 空欄と文字（スペース記号含む）のスキップ
        If Cells(i, 13).Value = "" Then
            GoTo Continue
        ElseIf TypeName(Cells(i, 13).Value) = "String" Then
            GoTo Continue
        End If

        '  入館時刻の取得
        Dim nyukan As Date
        nyukan = Cells(i, 13).Value
        '   始業時刻の取得
        Dim shigyo As Date
        shigyo = Cells(i, 16).Value
         ' 差を計算（ 分単位 ）
        Dim gap As Date
        gap = DateDiff("n", nyukan, shigyo)
        'Datediff()は２つの時刻の差を算出するもの。１番目のプロパティで単位を決定する。

        If gap < 0 Then
            Cells(i, 19).Interior.Color = checkColor
        ElseIf gap > 60 Then
            Cells(i, 19).Interior.Color = checkColor
        End If
                
Continue:

End Sub


Sub logOnCheck(i, checkColor)

        ' 空欄と文字（スペース記号含む）のスキップ
        If Cells(i, 15).Value = "" Then
            GoTo Continue
        ElseIf TypeName(Cells(i, 15).Value) = "String" Then
            GoTo Continue
        End If

        '   ログオン時刻の取得
        Dim logOn As Date
        logOn = Cells(i, 15).Value
        '   始業時刻の取得
        Dim shigyo As Date
        shigyo = Cells(i, 16).Value
         ' 差を計算（ 分単位 ）
        Dim gap As Date
        gap = DateDiff("n", logOn, shigyo)
        
        If gap < 0 Then
            Cells(i, 20).Interior.Color = checkColor
        ElseIf gap > 30 Then
            Cells(i, 20).Interior.Color = checkColor
        End If
                
Continue:

End Sub


Sub logOffCheck(i, checkColor)

        ' 空欄と文字（スペース記号含む）のスキップ
        If Cells(i, 31).Value = "" Then
            GoTo Continue
        ElseIf TypeName(Cells(i, 31).Value) = "String" Then
            GoTo Continue
        End If

        '   ログオフ時刻の取得
        Dim logOff As Date
        logOff = Cells(i, 31).Value
        '    終業時刻の取得
        Dim syugyo As Date
        syugyo = Cells(i, 32).Value
         ' 差を計算（ 分単位 ）
        Dim gap As Date
        gap = DateDiff("n", logOff, syugyo)
        
        If gap < 0 Then
            Cells(i, 36).Interior.Color = checkColor
        ElseIf gap > 9 Then
            Cells(i, 36).Interior.Color = checkColor
        End If
                
Continue:

End Sub

Sub taikanCheck(i, checkColor)

        ' 空欄と文字（スペース記号含む）のスキップ
        If Cells(i, 29).Value = "" Then
            GoTo Continue
        ElseIf TypeName(Cells(i, 29).Value) = "String" Then
            GoTo Continue
        End If
        
        '   ログオフ時刻の取得
        Dim logOff As Date
        logOff = Cells(i, 31).Value
        '    終業時刻の取得
        Dim syugyo As Date
        syugyo = Cells(i, 32).Value
        ' 退館時刻の取得
        Dim taikan As Date
        taikan = Cells(i, 29).Value
         
        Dim gap As Date
        
         '終業と退館の乖離
        gap = DateDiff("n", syugyo, taikan)
        
        If gap < 0 Then
            Cells(i, 35).Interior.Color = checkColor
        ElseIf gap > 30 Then
            Cells(i, 35).Interior.Color = checkColor
        End If
                
        ' ログオフと退館の乖離
        gap = DateDiff("n", logOff, taikan)
        
        If gap < 0 Then
            Cells(i, 34).Interior.Color = checkColor
        ElseIf gap > 30 Then
            Cells(i, 34).Interior.Color = checkColor
        End If
                
Continue:

End Sub