シンプルです。過去に似たようなことをしたことがありますが、これは私がやった方法です。
1) ルール ページをセットアップします。私は「パターン」と呼んでいます。これらのパターンは、A 列 (A2 以降) が「名前」であり、B 列が正規表現パターンであるとセットアップされます。
2) これらを次のコードで public 変数にロードします (パターン シートにボタンを配置して、このマクロを実行し、メモリにロードします)。
Option Explicit
Public Patterns() As String
Sub LoadPatterns()
Dim cell As Range
Dim bRow As Range
Sheets("Patterns").Activate
'select column A, and load into first dimensino
Range("A2", Sheets("Patterns").Range("A" & Sheets("Patterns").Range("A:A").Rows.Count).End(xlUp).Address).Select
ReDim Patterns(Selection.Rows.Count - 1, 1)
For Each cell In Selection
Patterns(cell.Row - 2, 0) = cell.Value
Next
'select column B and load into the second dimension
Range("B2", Sheets("Patterns").Range("A" & Sheets("Patterns").Range("A:A").Rows.Count).End(xlUp).Address).Select
For Each cell In Selection
Patterns(cell.Row - 2, 1) = cell.Value
Next
End Sub
3) 次の UDF を作成し、VB 正規表現ライブラリを参照として vba にロードします (Microsoft VBScript 正規表現 5.5、http://www.macrostash.com/2011/10/08/simple-regular-expression-tutorial-forを参照)。 -excel-vba/ ) を実行し、手順 2 を実行した後、トランザクションの説明で式として呼び出します。
Public Function rxBanking(sName As String)
Dim x As Integer
'Get & load Patterns
Dim regex As New VBScript_RegExp_55.RegExp
Dim match
For x = 0 To UBound(Patterns)
regex.Pattern = Patterns(x, 1)
regex.ignorecase=True
match = regex.Test(sName)
If match Then
rxBanking = Patterns(x, 0)
Exit For
Else
rxBanking = "Unknown"
End If
Next
End Function
たとえば、次のようなパターンをロードした後:
Category | RegEx pattern
--------------------------------
Home loan | INTEREST[\s]CHARGED
取引データがセル D1 にある場合、式を使用して分類できます。
=rxBanking(D1)
パターンをリロードする場合、自動的に再計算されないため、数式をスプレッドシートにコピーし直す必要があります。
regex の使い方については (よく知っていても、必要になるかもしれません) http://regexpal.com/が優れたテスト環境です。