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

我想要从Excel中的规则列表中分类银行对账单。 我试过使用vlookup,但我希望能够有非完全匹配,据我所知,vlookup不适合这个。

例如,如果我的声明看起来像这样,并位于工作表“声明”

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到表“声明”称为类使用规则为每个事务生成类别?

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

1)设置规则页面,我称之为“模式”。 这些模式用A列(从A2开始)作为“名称”,而B列是正则expression式模式来设置。

2)使用下面的代码将这些variables加载到一个公共variables中(我在模板上放置一个button来运行这个macros并将它们加载到内存中):

 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)创build下面的UDF,加载VB正则expression式库作为vba中的参考(Microsoft VBScript Regular Expressions 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) 

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

对于使用正则expression式(即使你很熟悉,你可能需要)的帮助,我发现一个伟大的testing场地是http://regexpal.com/