2013-08-05 88 views
1

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

举例来说,如果我的发言看起来像这一点,并定位于工作表“声明”

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将另一列添加到工作表的简单方法“Statement”称为Category,它使用规则为每个事务生成类别?

回答

-1

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

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

2)加载到这些用下面的代码一个公共变量(I把按钮上的图案片运行此宏并把它们加载到内存中):

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参考(微软的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) 

如果你重装你的模式对其进行分类,你将需要重新复制您的公式下的电子表格上,因为它不会自动重新计算。

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