PR

Excel VBAでデータ種の自動カウントと自動分類を解説

Excel

こんにちは!今回はExcelのVBAを使って、あらかじめ用意したワードリストに存在するデータの種類を自動でカウントと分類する方法をご紹介します。データ数が少ないうちは構いませんが、膨大になればなるほど手間や間違いが起こるので、是非このコードを使って正確に自動化していきましょう。用途としては、業務データの整理や報告書の作成、データベースの管理、プロジェクト管理、リストのメンテナンスなどが考えられます。これにより、手作業では見逃しがちな重複や誤りを防ぎ、データ管理の精度と効率を大幅に向上させることができます。

使用するワードリスト

まず使用するワードリストについて解説します。
ワードリストは「データリスト」のワークシート上に、「№」「品番」「工程」という構成となっており、今回はデータを1000行分作成しました。

VBAの実行結果

VBAを実行した結果下図のような結果を得る事が出来ます。列ごとに4行目に種類の数を入力し、その下に具体的な項目名を並べております。

コード解説★★★(コピーはここ)★★★

Sub Sample07()
    Dim Grade As New Collection, Process As New Collection
    Dim C_N As Long, LastRow As Long
    Dim wsSource As Worksheet, wsResult As Worksheet
    Dim GradeResultCell As String, ProcessResultCell As String
    
    ' ワークシートの設定
    Set wsSource = Worksheets("データリスト")
    Set wsResult = Worksheets("結果")
    ' 結果を入力するセルの設定
    GradeResultCell = "C4"
    ProcessResultCell = "D4"
    
    ' 最終行を取得(データがある行まで動的に取得)
    LastRow = wsSource.Cells(wsSource.Rows.Count, 1).End(xlUp).Row
    
    ' コレクションにデータを追加(重複を防ぐ)
    On Error Resume Next
    For C_N = 2 To LastRow
        If wsSource.Cells(C_N, 2).Value <> "" Then
            Grade.Add wsSource.Cells(C_N, 2).Value, CStr(wsSource.Cells(C_N, 2).Value)
        End If
        If wsSource.Cells(C_N, 3).Value <> "" Then
            Process.Add wsSource.Cells(C_N, 3).Value, CStr(wsSource.Cells(C_N, 3).Value)
        End If
    Next C_N
    On Error GoTo 0
    
    ' グレードの種類数を結果シートに入力
    wsResult.Range(GradeResultCell).Value = Grade.Count
    ' 工程の種類数を結果シートに入力
    wsResult.Range(ProcessResultCell).Value = Process.Count
    
    ' グレードを結果シートに出力
    For C_N = 1 To Grade.Count
        wsResult.Cells(C_N + 4, wsResult.Range(GradeResultCell).Column).Value = Grade(C_N)
    Next C_N
    

    ' 工程を結果シートに出力
    For C_N = 1 To Process.Count
        wsResult.Cells(C_N + 4, wsResult.Range(ProcessResultCell).Column).Value = Process(C_N)
    Next C_N
End Sub

解説

このVBAコードは、大きく分けて5つの機能で構成されています。
  1. 変数の宣言:使用する変数や配列、コレクションを宣言しています。
  2. 設定 :データリストのシート名、セル位置を指定します。
  3. データ数を確認:確認対象のデータ数を調べます。
  4. データの種類を確認:コレクションオブジェクトを使用してデータの種類を確認します。
  5. データの格納:指定したセルへ結果を出力します。

変数の宣言

Sub Sample07()
    Dim Grade As New Collection, Process As New Collection
    Dim C_N As Long, LastRow As Long
    Dim wsSource As Worksheet, wsResult As Worksheet
    Dim GradeResultCell As String, ProcessResultCell As String

ここでは使用する変数やコレクションを宣言しています。

設定

    ' ワークシートの設定
    Set wsSource = Worksheets("データリスト")
    Set wsResult = Worksheets("結果")
    ' 結果を入力するセルの設定
    GradeResultCell = "C4"
    ProcessResultCell = "D4"

ここではそれぞれのワークシート名を変数に入力し、データ種類の結果を返すセルを変数へ入力する。

データ数を確認

' 最終行を取得(データがある行まで動的に取得)
    LastRow = wsSource.Cells(wsSource.Rows.Count, 1).End(xlUp).Row

ここではデータリストのA列最終行を確認し変数へ入力する。

データの種類を確認

    ' コレクションにデータを追加(重複を防ぐ)
    On Error Resume Next
    For C_N = 2 To LastRow
        If wsSource.Cells(C_N, 2).Value <> "" Then
            Grade.Add wsSource.Cells(C_N, 2).Value, CStr(wsSource.Cells(C_N, 2).Value)
        End If
        If wsSource.Cells(C_N, 3).Value <> "" Then
            Process.Add wsSource.Cells(C_N, 3).Value, CStr(wsSource.Cells(C_N, 3).Value)
        End If
    Next C_N
    On Error GoTo 0

ここでは重複を排除するためにワードをコレクションに格納していきます。その際にエラー発生時にはスキップする処理などを定義しています。このコードでは2列分を定義してありますが、列数の増加に合わせて繰り返し処理を追加して動的に対応できるようにするのもいいかもしれませんね。

データの格納

    ' グレードの種類数を結果シートに入力
    wsResult.Range(GradeResultCell).Value = Grade.Count
    ' 工程の種類数を結果シートに入力
    wsResult.Range(ProcessResultCell).Value = Process.Count
    
    ' グレードを結果シートに出力
    For C_N = 1 To Grade.Count
        wsResult.Cells(C_N + 4, wsResult.Range(GradeResultCell).Column).Value = Grade(C_N)
    Next C_N

    ' 工程を結果シートに出力
    For C_N = 1 To Process.Count
        wsResult.Cells(C_N + 4, wsResult.Range(ProcessResultCell).Column).Value = Process(C_N)
    Next C_N
End Sub

ここでは結果をセルに入力しています。データ種類の数やデータ項目をリストとしています。

使用している技術

基本:FOR-NEXT、Collection、Add

まとめ

このVBAコードを活用することで、Excel内のデータリストに含まれるデータの種類を自動でカウントし、分類する作業が大幅に効率化されます。手作業では見逃しがちな重複や誤りを防ぎ、正確なデータ管理が可能となるため、データ数が多くなるほどその効果は大きくなります。VBAの基本機能を駆使し、コレクションオブジェクトやループ処理を利用することで、複雑なデータ処理を簡単に実現できます。是非このコードを活用して、データ管理の精度を向上させてください。


AIで効率化してライバルに差をつける!【ビットランドAI】


AIで効率化してライバルに差をつける!【ビットランドAI】

コメント

タイトルとURLをコピーしました