「日付ごとの一致件数を折れ線グラフ化する」ための VBA 実務テンプレートをまとめました。これで NGワード一致件数を日付単位で集計 → 折れ線グラフ化 が可能になります。
日付ごとの一致件数を折れ線グラフ化版
Sub RangeToArray_NGWordCheck_DailyLineChart()
Dim wsData As Worksheet
Dim wsNG As Worksheet
Dim wsReport As Worksheet
Dim rng As Range
Dim arr As Variant
Dim ngArr As Variant
Dim i As Long, j As Long, k As Long
Dim regEx As Object
Dim dict As Object
Dim chartObj As ChartObject
Dim logDate As Variant
' シート指定
Set wsData = ThisWorkbook.Sheets("Sheet1") ' データ側
Set wsNG = ThisWorkbook.Sheets("NGWords") ' NGワードリスト側
Set wsReport = ThisWorkbook.Sheets("Report") ' レポート出力側
' データ範囲(例:A列に日付、B〜C列にテキスト)
Set rng = wsData.Range("A2:C1000")
arr = rng.Value
' NGワードリスト
ngArr = wsNG.Range("A1", wsNG.Cells(wsNG.Rows.Count, "A").End(xlUp)).Value
' 正規表現
Set regEx = CreateObject("VBScript.RegExp")
regEx.IgnoreCase = True
regEx.Global = True
' 集計用 Dictionary(日付ごと)
Set dict = CreateObject("Scripting.Dictionary")
' チェック処理+日付ごと集計
For i = LBound(arr, 1) To UBound(arr, 1)
logDate = arr(i, 1) ' A列の日付
If IsDate(logDate) Then
For j = 2 To UBound(arr, 2) ' B列以降をチェック
If VarType(arr(i, j)) = vbString Then
For k = LBound(ngArr, 1) To UBound(ngArr, 1)
regEx.Pattern = ngArr(k, 1)
If regEx.Test(arr(i, j)) Then
' 日付ごとにカウント
If Not dict.Exists(CStr(logDate)) Then
dict.Add CStr(logDate), 1
Else
dict(CStr(logDate)) = dict(CStr(logDate)) + 1
End If
Exit For
End If
Next k
End If
Next j
End If
Next i
' レポート出力
wsReport.Cells.Clear
wsReport.Range("A1:B1").Value = Array("Date", "Count")
Dim row As Long: row = 2
For Each k In dict.Keys
wsReport.Cells(row, 1).Value = k
wsReport.Cells(row, 2).Value = dict(k)
row = row + 1
Next k
' グラフ作成(折れ線グラフ)
wsReport.ChartObjects.Delete ' 古いグラフ削除
Set chartObj = wsReport.ChartObjects.Add(Left:=250, Top:=50, Width:=500, Height:=300)
With chartObj.Chart
.ChartType = xlLineMarkers
.SetSourceData Source:=wsReport.Range("A1:B" & row - 1)
.HasTitle = True
.ChartTitle.Text = "日付ごとのNGワード一致件数"
.Axes(xlCategory).HasTitle = True
.Axes(xlCategory).AxisTitle.Text = "Date"
.Axes(xlValue).HasTitle = True
.Axes(xlValue).AxisTitle.Text = "Count"
End With
End Sub
VBポイント
- A列に日付、B〜C列にテキストがある前提で処理
- NGワード一致件数を 日付ごとに Dictionary で集計
- Report シートに一覧化 → 折れ線グラフを自動生成
- グラフは xlLineMarkers(折れ線+マーカー付き)で視覚的にわかりやすい
実務応用例
- 日次監査レポート(NGワード検出件数の推移)
- 顧客入力フォームのエラーチェック件数の時系列分析
- コンプライアンス監査での「問題発生件数の推移」可視化
👉 このテンプレを使えば「NGワードチェック → 日付ごと集計 → 折れ線グラフ化」まで一気に自動化できます。
さらに応用すると「週単位・月単位で集計してグラフ化」も可能です。
