こちらに「入力チェック+一覧出力+グラフ化」を一括で行う総合マクロのサンプルをまとめました。
未入力・数値・日付のチェックを行い、結果を一覧シートに出力し、さらにエラー種別ごとの件数を集計してグラフ化します。
総合マクロコード
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✅ 処理の流れ
- 入力シートを走査し、未入力・数値・日付をチェック
- 「チェック結果」シートにエラー内容を一覧出力
- 「エラー集計」シートにエラー種別ごとの件数を集計
- 棒グラフを自動生成して視覚化
💡 応用ポイント
- 列ごとに異なるチェックルールを追加可能(文字数制限、正規表現など)
- グラフを円グラフや折れ線グラフに変更可能
- 定期実行すれば「入力品質レポート」として活用可能
👉 この総合マクロを使えば、入力チェック → エラー一覧化 → 集計 → グラフ化までをワンクリックで自動化できます。


