Excel VBA | Range→配列→加工→高速書戻し の実務テンプレ

VBA
スポンサーリンク

「日付ごとの一致件数を折れ線グラフ化する」ための 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ワードチェック → 日付ごと集計 → 折れ線グラフ化」まで一気に自動化できます。
さらに応用すると「週単位・月単位で集計してグラフ化」も可能です。

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