Excel VBA | 入力チェック結果を一覧表にまとめるマクロ集

VBA
スポンサーリンク

こちらに「入力チェック結果を一覧表にまとめるマクロ集」をご紹介します。
セルを色付けするだけでなく、別シートに「どの行・どの列で・どんなエラーがあったか」を一覧化することで、後から確認・修正がしやすくなります。


サンプル1:未入力・数値・日付チェック結果を一覧化

Sub CheckAndReport()
    Dim ws As Worksheet, wsReport As Worksheet
    Dim lastRow As Long, i As Long, reportRow As Long
    
    Set ws = Sheets("入力シート")
    On Error Resume Next
    Set wsReport = Sheets("チェック結果")
    If wsReport Is Nothing Then
        Set wsReport = Sheets.Add
        wsReport.Name = "チェック結果"
    End If
    On Error GoTo 0
    
    wsReport.Cells.Clear
    wsReport.Range("A1:C1").Value = Array("行番号", "列名", "エラー内容")
    reportRow = 2
    
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    For i = 2 To lastRow
        ' A列:必須
        If Trim(ws.Cells(i, 1).Value) = "" Then
            wsReport.Cells(reportRow, 1).Value = i
            wsReport.Cells(reportRow, 2).Value = "A列"
            wsReport.Cells(reportRow, 3).Value = "未入力"
            reportRow = reportRow + 1
        End If
        
        ' B列:数値
        If Not IsNumeric(ws.Cells(i, 2).Value) Then
            wsReport.Cells(reportRow, 1).Value = i
            wsReport.Cells(reportRow, 2).Value = "B列"
            wsReport.Cells(reportRow, 3).Value = "数値でない"
            reportRow = reportRow + 1
        End If
        
        ' C列:日付
        If Not IsDate(ws.Cells(i, 3).Value) Then
            wsReport.Cells(reportRow, 1).Value = i
            wsReport.Cells(reportRow, 2).Value = "C列"
            wsReport.Cells(reportRow, 3).Value = "日付でない"
            reportRow = reportRow + 1
        End If
    Next i
    
    MsgBox "チェック完了。結果は「チェック結果」シートに出力しました。"
End Sub
VB

サンプル2:文字数制限チェックを追加

Sub CheckLengthAndReport()
    Dim ws As Worksheet, wsReport As Worksheet
    Dim lastRow As Long, i As Long, reportRow As Long
    
    Set ws = Sheets("入力シート")
    Set wsReport = Sheets("チェック結果")
    reportRow = wsReport.Cells(wsReport.Rows.Count, 1).End(xlUp).Row + 1
    
    lastRow = ws.Cells(ws.Rows.Count, "D").End(xlUp).Row
    
    For i = 2 To lastRow
        If Len(ws.Cells(i, 4).Value) > 10 Then
            wsReport.Cells(reportRow, 1).Value = i
            wsReport.Cells(reportRow, 2).Value = "D列"
            wsReport.Cells(reportRow, 3).Value = "文字数超過"
            reportRow = reportRow + 1
        End If
    Next i
End Sub
VB

サンプル3:エラー件数を集計

Sub SummarizeErrors()
    Dim wsReport As Worksheet
    Dim lastRow As Long
    
    Set wsReport = Sheets("チェック結果")
    lastRow = wsReport.Cells(wsReport.Rows.Count, 1).End(xlUp).Row
    
    wsReport.Cells(1, 5).Value = "エラー件数"
    wsReport.Cells(2, 5).Value = lastRow - 1
End Sub
VB

✅ まとめ

  • チェック結果を「チェック結果」シートに一覧化 → 修正が容易
  • 行番号・列名・エラー内容を記録 → どこを直せばよいか一目でわかる
  • 件数集計を加えれば、全体のエラー状況を把握可能

💡 この仕組みを応用すれば、エラー種別ごとに色分けした集計表や、担当者別のエラー一覧を自動生成することもできます。

VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました