Excel VBA | 入力チェック+一覧出力+グラフ化」を一括で行う総合マクロ

VBA
スポンサーリンク

こちらに「入力チェック+一覧出力+グラフ化」を一括で行う総合マクロのサンプルをまとめました。
未入力・数値・日付のチェックを行い、結果を一覧シートに出力し、さらにエラー種別ごとの件数を集計してグラフ化します。


総合マクロコード

Sub CheckReportAndChart()
    Dim wsSrc As Worksheet, wsReport As Worksheet, wsSummary As Worksheet
    Dim lastRow As Long, i As Long, reportRow As Long
    Dim dict As Object, key As Variant
    Dim chartObj As ChartObject
    
    Set wsSrc = Sheets("入力シート")
    
    ' チェック結果シート準備
    On Error Resume Next
    Set wsReport = Sheets("チェック結果")
    If wsReport Is Nothing Then
        Set wsReport = Sheets.Add
        wsReport.Name = "チェック結果"
    Else
        wsReport.Cells.Clear
    End If
    On Error GoTo 0
    
    wsReport.Range("A1:C1").Value = Array("行番号", "列名", "エラー内容")
    reportRow = 2
    
    lastRow = wsSrc.Cells(wsSrc.Rows.Count, "A").End(xlUp).Row
    
    ' ===== 入力チェック処理 =====
    For i = 2 To lastRow
        ' A列:必須
        If Trim(CStr(wsSrc.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(wsSrc.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(wsSrc.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
    
    ' ===== エラー種別ごとに件数集計 =====
    On Error Resume Next
    Set wsSummary = Sheets("エラー集計")
    If wsSummary Is Nothing Then
        Set wsSummary = Sheets.Add
        wsSummary.Name = "エラー集計"
    Else
        wsSummary.Cells.Clear
    End If
    On Error GoTo 0
    
    Set dict = CreateObject("Scripting.Dictionary")
    lastRow = wsReport.Cells(wsReport.Rows.Count, 1).End(xlUp).Row
    For i = 2 To lastRow
        If wsReport.Cells(i, 3).Value <> "" Then
            If dict.exists(wsReport.Cells(i, 3).Value) Then
                dict(wsReport.Cells(i, 3).Value) = dict(wsReport.Cells(i, 3).Value) + 1
            Else
                dict.Add wsReport.Cells(i, 3).Value, 1
            End If
        End If
    Next i
    
    wsSummary.Range("A1:B1").Value = Array("エラー種別", "件数")
    i = 2
    For Each key In dict.keys
        wsSummary.Cells(i, 1).Value = key
        wsSummary.Cells(i, 2).Value = dict(key)
        i = i + 1
    Next key
    
    ' ===== グラフ作成 =====
    Set chartObj = wsSummary.ChartObjects.Add(Left:=250, Top:=50, Width:=400, Height:=300)
    With chartObj.Chart
        .ChartType = xlColumnClustered
        .SetSourceData Source:=wsSummary.Range("A1:B" & i - 1)
        .HasTitle = True
        .ChartTitle.Text = "エラー種別ごとの件数"
    End With
    
    MsgBox "入力チェック・一覧出力・グラフ化が完了しました。"
End Sub
VB

✅ 処理の流れ

  1. 入力シートを走査し、未入力・数値・日付をチェック
  2. 「チェック結果」シートにエラー内容を一覧出力
  3. 「エラー集計」シートにエラー種別ごとの件数を集計
  4. 棒グラフを自動生成して視覚化

💡 応用ポイント

  • 列ごとに異なるチェックルールを追加可能(文字数制限、正規表現など)
  • グラフを円グラフや折れ線グラフに変更可能
  • 定期実行すれば「入力品質レポート」として活用可能

👉 この総合マクロを使えば、入力チェック → エラー一覧化 → 集計 → グラフ化までをワンクリックで自動化できます。

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