この記事では、Excel VBA(Visual Basic for Applications)を用いて業務効率化を図る手法の一つとして、「文字列の編集距離に基づくフィルタリング」に焦点を当てます。具体的なコード例を用いて解説し、さらにその応用例も3つ以上紹介します。
なぜ文字列の編集距離が重要か
文字列の編集距離は、ある文字列を別の文字列に変換する際に必要な最小の操作数(挿入、削除、置換)を指します。この数値が小さいほど、二つの文字列は類似していると言えます。業務においては、顧客名の綴り違いや製品名の変種など、多くの場面で文字列の編集距離が有用です。
業務例
– 顧客情報の整理
– 商品名のマッチング
– 文書内の重複排除
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を用いて「文字列の編集距離に基づくフィルタリング」を実装する方法を解説しました。この手法は、業務における多くの場面で有用であり、特に文字列データが多く扱われる場合に効果を発
揮します。応用例も複数挙げたので、是非参考にしてください。
コメント