在Excel中对银行对帐单进行分类

时间:2013-08-05 01:55:04

标签: excel vba finance

我想要从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将另一列添加到名为Category的“Statement”表中,该表使用规则为每个事务生成类别?

1 个答案:

答案 0 :(得分:-1)

简单,没有。我过去做过类似的事情,这就是我做的事情。

1)设置规则页面,我称之为“模式”。设置这些模式时,A列(从A2开始)是'name',B列是正则表达式。

2)使用以下代码将它们加载到一个公共变量中(我在模式表上放了一个按钮来运行这个宏并将它们加载到内存中。):

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,在vba中加载VB正则表达式库作为参考(Microsoft VBScript正则表达式5.5,参见http://www.macrostash.com/2011/10/08/simple-regular-expression-tutorial-for-excel-vba/),并在运行步骤2后将其作为公式在您的事务描述中调用:< / p>

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)

如果您重新加载模式,则需要在电子表格中重新复制公式,因为它不会自动重新计算。

有关使用正则表达式的帮助(即使您熟悉,也可能需要),我发现一个很好的测试基础是http://regexpal.com/