Excel VBAを用いた業務効率化:文字列の編集距離に基づくフィルタリング手法

この記事では、Excel VBA(Visual Basic for Applications)を用いて業務効率化を図る手法の一つとして、「文字列の編集距離に基づくフィルタリング」に焦点を当てます。具体的なコード例を用いて解説し、さらにその応用例も3つ以上紹介します。

目次

Excel VBAの基本

Excel VBA(Visual Basic for Applications)は、Microsoft Excelに組み込まれたプログラミング言語です。これを用いると、単純作業の自動化だけでなく、高度なデータ分析やレポート作成も可能になります。

そもそも、どこにVBAコードを書いて、どう実行すれば良いのか分からない場合は、以下の記事をご参照ください。

なぜ文字列の編集距離が重要か

文字列の編集距離は、ある文字列を別の文字列に変換する際に必要な最小の操作数(挿入、削除、置換)を指します。この数値が小さいほど、二つの文字列は類似していると言えます。業務においては、顧客名の綴り違いや製品名の変種など、多くの場面で文字列の編集距離が有用です。

業務例

– 顧客情報の整理
– 商品名のマッチング
– 文書内の重複排除

VBAでの編集距離計算の基本コード

以下は、Excel VBAで文字列の編集距離を計算する基本的なコードです。


Function EditDistance(ByVal str1 As String, ByVal str2 As String) As Integer
    ' 編集距離を計算する関数
    Dim i As Integer, j As Integer
    Dim len1 As Integer, len2 As Integer
    Dim dp() As Integer
    
    len1 = Len(str1)
    len2 = Len(str2)
    ReDim dp(len1, len2)
    
    ' 初期値設定
    For i = 0 To len1
        dp(i, 0) = i
    Next i
    For j = 0 To len2
        dp(0, j) = j
    Next j
    
    ' 編集距離計算
    For i = 1 To len1
        For j = 1 To len2
            dp(i, j) = WorksheetFunction.Min(dp(i - 1, j) + 1, dp(i, j - 1) + 1, dp(i - 1, j - 1) + Abs(StrComp(Mid(str1, i, 1), Mid(str2, j, 1), vbTextCompare)))
        Next j
    Next i
    
    EditDistance = dp(len1, len2)
End Function

コードの解説

– `Function EditDistance(ByVal str1 As String, ByVal str2 As String) As Integer`: 文字列`str1`と`str2`の編集距離を計算する関数を定義します。
– `Dim dp() As Integer`: 編集距離を保存するための二次元配列`dp`を宣言します。
– `ReDim dp(len1, len2)`: `dp`配列のサイズを動的に変更します。
– `dp(i, j) = WorksheetFunction.Min(…)`: 編集距離の計算の核心部分です。三つの値の最小値を`dp(i, j)`に保存します。

応用例

顧客リストの自動整理

顧客名が微妙に異なるデータが多い場合、編集距離を用いて自動で整理できます。


' 顧客リストの自動整理
Sub AutoSortCustomerList()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    Dim lastRow As Long
    lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row
    
    Dim i As Long, j As Long
    For i = 2 To lastRow
        For j = i + 1 To lastRow
            If EditDistance(ws.Cells(i, 1), ws.Cells(j, 1)) <= 2 Then
                ws.Cells(j, 2) = ws.Cells(i, 1)
            End If
        Next j
    Next i
End Sub

製品マッチング

類似する製品名を自動で一致させます。


' 製品マッチング
Sub ProductMatching()
    ' コード内容(省略)
End Sub

エラー文の自動修正

ユーザーが入力したエラーメッセージに最も近い正しいエラーメッセージを推薦します。


' エラー文の自動修正
Sub AutoCorrectErrorMessage()
    ' コード内容(省略)
End Sub

まとめ

Excel VBAを用いて「文字列の編集距離に基づくフィルタリング」を実装する方法を解説しました。この手法は、業務における多くの場面で有用であり、特に文字列データが多く扱われる場合に効果を発

揮します。応用例も複数挙げたので、是非参考にしてください。

VBAも良いけどパワークエリも良い

VBAの解説をしてきましたが、VBAは正直煩雑でメンテナンス性が悪いです。最近はモダンExcelと呼ばれるパワークエリやパワーピボットへのシフトが進んできています。本サイトでもパワークエリの特集をしており、サンプルデータを含む全11回の学習コンテンツでパワークエリを習得することができます。

クリックするとパワークエリの全11講座が表示されます。

パワーピボットの記事はありません。興味がある場合は、書籍で学んでみてください

コメント

コメントする

目次