1

Excel のルールのリストから銀行の明細書を分類したいと考えています。vlookup を使用してみましたが、正確ではない一致を取得できるようにしたいと思います。私が知る限り、vlookup はこれには適していません。

たとえば、私のステートメントがこのように見え、ワークシート「Statement」にある場合

Date       |  Transaction desciption | Amount
7/3/2013   |  The Home Depot         | $345.00
7/4/2013   |  McDonald's #27         | $4.50 

そして、ワークシート「ルール」にルールのリストがありました

Rule            |   Category
The Home Depot  |  Home improvements
McDonald's *    |  Fast food

ルールを使用して各トランザクションのカテゴリを生成するカテゴリと呼ばれるシート「ステートメント」にvbaを使用して別の列を追加する簡単な方法はありますか?

4

1 に答える 1

-1

シンプルです。過去に似たようなことをしたことがありますが、これは私がやった方法です。

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/が優れたテスト環境です。

于 2013-08-05T04:12:56.000 に答える