この記事では、Excel VBA(Visual Basic for Applications)を用いて業務効率化を図る手法の一つとして、「文字列の編集距離に基づくフィルタリング」に焦点を当てます。具体的なコード例を用いて解説し、さらにその応用例も3つ以上紹介します。
Excel VBAの基本
Excel VBA(Visual Basic for Applications)は、Microsoft Excelに組み込まれたプログラミング言語です。これを用いると、単純作業の自動化だけでなく、高度なデータ分析やレポート作成も可能になります。
そもそも、どこにVBAコードを書いて、どう実行すれば良いのか分からない場合は、以下の記事をご参照ください。
![](https://ittrip.xyz/wp-content/uploads/2023/09/VBA-1.gif)
なぜ文字列の編集距離が重要か
文字列の編集距離は、ある文字列を別の文字列に変換する際に必要な最小の操作数(挿入、削除、置換)を指します。この数値が小さいほど、二つの文字列は類似していると言えます。業務においては、顧客名の綴り違いや製品名の変種など、多くの場面で文字列の編集距離が有用です。
業務例
– 顧客情報の整理
– 商品名のマッチング
– 文書内の重複排除
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講座が表示されます。
-
【初心者向け】パワークエリ入門:ETLツールを使ってエクセルデータを簡単に整形・統合しよう!(1/11)
-
【実践ガイド】パワークエリでデータ収集:Excel、CSV、PDF、Webデータを簡単に取り込む方法をマスターしよう!(2/11)
-
【総力特集】パワークエリで列操作をマスター:選択、変更、移動、削除、結合、分割の詳細解説&実践テクニック!(3/11)
-
【徹底解説】パワークエリで行操作をマスター!フィルター・保持・削除テクニックと練習用エクセルで実践学習(4/11)
-
パワークエリでデータクレンジング: 文字列結合、0埋め、テキスト関数をマスター(5/11)
-
パワークエリで四捨五入、切り捨て、切り上げをマスターする方法(6/11)
-
パワークエリで効率的なデータグループ化を実現する方法(7/11)
-
パワークエリで時間と日付の計算をマスター!便利な関数を使って効率アップ(8/11)
-
パワークエリで条件別集計をマスターする方法(9/11)
-
Excelパワークエリでクロス集計表とデータベース形式を瞬時に変換する方法(10/11)
-
Excelパワークエリ入門: 効率的なデータ整理をマスターしよう!(11/11)
パワーピボットの記事はありません。興味がある場合は、書籍で学んでみてください
コメント