【編集中 記事】Excelで作成した試験書の入力にミスがないかを確認するマクロ

## 作成の目的
試験書への入力ミスを自動チェックする

## チェックする試験書は以下
![試験書サンプル.PNG](https://qiita-image-store.s3.amazonaws.com/0/181400/6331dd75-7046-adeb-e437-44e736917115.png)

## 試験書ルール
### 実施可否 列ルール
・「否」の場合 → その行に値が一切入っていないことを確認する
・「要」の場合 → ステータス列のセルを判定する （○： 入力されていること　×： 入力されていないこと）
    ・OK   →【実施者】○｜【実施日時】○｜【実施環境】○｜【Bug#】×｜【Block#】×｜【備考】○
    ・NG   →【実施者】○｜【実施日時】○｜【実施環境】○｜【Bug#】○｜【Block#】×｜【備考】○
    ・PEND →【実施者】○｜【実施日時】○｜【実施環境】×｜【Bug#】×｜【Block#】×｜【備考】○
    ・BLOCK→【実施者】○｜【実施日時】×｜【実施環境】×｜【Bug#】×｜【Block#】○｜【備考】○
    ・N/T  →ステータスの列にN/Tがないことを確認する

## コード
```
Sub CheckTestCase()

'試験書を指定するファイルダイアログ表示
'指定した試験書のオブジェクト変数へ格納
Dim TargetBook As String
TargetBook = Application.GetOpenFilename("Excel ブック,*.xls?")
If TargetBook = "False" Then Exit Sub
Workbooks.Open TargetBook

'=====================
'Debug→TargetBook
Debug.Print "TargetBookは【" & TargetBook & "】" '指定したファイル名までのPATHが表示される


'その試験書の全シートに対して実行していく
Dim NumOfSheets As Long
Dim NameOfSheet As String
Dim DoYouExecute As String
Dim LastRow As Long
Dim i As Long
Dim j As Long
Dim k As Long

NumOfSheets = ActiveWorkbook.Worksheets.Count

'=====================
'Debug→NumOfSheets
Debug.Print NumOfSheets '5 存在するシート数 表示

For i = 1 To NumOfSheets
L1:

If i > NumOfSheets Then
    Exit For
End If

Worksheets(i).Activate

LastRow = Cells(Rows.Count, 2).End(xlUp).Row
Debug.Print "最終行は " & LastRow & "です"

'シートが切り替わるタイミングで実施有無を確認させるダイアログを表示する

NameOfSheet = ActiveSheet.Name

'=====================
'Debug→NameOfSheet
Debug.Print NameOfSheet


DoYouExecute = MsgBox("【" & NameOfSheet & "】" & "の試験書チェックを" & vbCrLf & _
"実行しますか？", vbYesNo)

    '「いいえ」の場合→次のシートへループ
    If DoYouExecute = vbNo Then
        i = i + 1
        GoTo L1
    
    ElseIf DoYouExecute = vbYes Then
    '「はい」の場合→そのシート内で試験書チェック処理実行
        '実施可否の列をループする
            '「否」→その行に値が一切入っていないことを確認する
            For j = 3 To LastRow
                If Cells(j, 9).Value = "否" Then
                    For k = 10 To 16
                        If Cells(j, k).Value <> "" Then
                            Cells(j, k).Interior.ColorIndex = 46
                        End If
                    Next k
                    
            '「要」→ステータス列のセルを判定する
                ElseIf Cells(j, 9).Value = "要" Then
                
                    'OK   →【実施者】○｜【実施日時】○｜【実施環境】○｜【Bug#】×｜【Block#】×｜【備考】○
                    If Cells(j, 13).Value = "OK" Then
                        If Cells(j, 10).Value = "" Then
                            Cells(j, 10).Interior.ColorIndex = 46
                        End If
                        If Cells(j, 11).Value = "" Then
                            Cells(j, 11).Interior.ColorIndex = 46
                        End If
                        If Cells(j, 12).Value = "" Then
                            Cells(j, 12).Interior.ColorIndex = 46
                        End If
                        If Cells(j, 14).Value <> "" Then
                            Cells(j, 14).Interior.ColorIndex = 46
                        End If
                        If Cells(j, 15).Value <> "" Then
                            Cells(j, 15).Interior.ColorIndex = 46
                        End If
                        If Cells(j, 16).Value = "" Then
                            Cells(j, 16).Interior.ColorIndex = 46
                        End If

                            
                    'NG   →【実施者】○｜【実施日時】○｜【実施環境】○｜【Bug#】○｜【Block#】×｜【備考】○
                    ElseIf Cells(j, 13).Value = "NG" Then
                        If Cells(j, 10).Value = "" Then
                            Cells(j, 10).Interior.ColorIndex = 46
                        End If
                        If Cells(j, 11).Value = "" Then
                            Cells(j, 11).Interior.ColorIndex = 46
                        End If
                        If Cells(j, 12).Value = "" Then
                            Cells(j, 12).Interior.ColorIndex = 46
                        End If
                        If Cells(j, 14).Value = "" Then
                            Cells(j, 14).Interior.ColorIndex = 46
                        End If
                        If Cells(j, 15).Value <> "" Then
                            Cells(j, 15).Interior.ColorIndex = 46
                        End If
                        If Cells(j, 16).Value = "" Then
                            Cells(j, 16).Interior.ColorIndex = 46
                        End If
                    
                    'PEND →【実施者】○｜【実施日時】○｜【実施環境】×｜【Bug#】×｜【Block#】×｜【備考】○
                    ElseIf Cells(j, 13).Value = "PEND" Then
                        If Cells(j, 10).Value = "" Then
                            Cells(j, 10).Interior.ColorIndex = 46
                        End If
                        If Cells(j, 11).Value = "" Then
                            Cells(j, 11).Interior.ColorIndex = 46
                        End If
                        If Cells(j, 12).Value <> "" Then
                            Cells(j, 12).Interior.ColorIndex = 46
                        End If
                        If Cells(j, 14).Value <> "" Then
                            Cells(j, 14).Interior.ColorIndex = 46
                        End If
                        If Cells(j, 15).Value <> "" Then
                            Cells(j, 15).Interior.ColorIndex = 46
                        End If
                        If Cells(j, 16).Value = "" Then
                            Cells(j, 16).Interior.ColorIndex = 46
                        End If
                    
                    'BLOCK→【実施者】○｜【実施日時】×｜【実施環境】×｜【Bug#】×｜【Block#】○｜【備考】○
                    ElseIf Cells(j, 13).Value = "BLOCK" Then
                        If Cells(j, 10).Value = "" Then
                            Cells(j, 10).Interior.ColorIndex = 46
                        End If
                        If Cells(j, 11).Value <> "" Then
                            Cells(j, 11).Interior.ColorIndex = 46
                        End If
                        If Cells(j, 12).Value <> "" Then
                            Cells(j, 12).Interior.ColorIndex = 46
                        End If
                        If Cells(j, 14).Value <> "" Then
                            Cells(j, 14).Interior.ColorIndex = 46
                        End If
                        If Cells(j, 15).Value = "" Then
                            Cells(j, 15).Interior.ColorIndex = 46
                        End If
                        If Cells(j, 16).Value = "" Then
                            Cells(j, 16).Interior.ColorIndex = 46
                        End If
                    
                    'N/T  →ステータスの列にN/Tがないことを確認する
                    ElseIf Cells(j, 13).Value = "N/T" Then
                        Cells(j, 13).Interior.ColorIndex = 46
                        
                    End If
                End If
             Next j
        End If
Next i
    
End Sub
```