【问题标题】:Categorizing bank statements in Excel在 Excel 中对银行对账单进行分类
【发布时间】:2013-08-05 12:12:56
【问题描述】:

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

【问题讨论】:

    标签: excel vba finance


    【解决方案1】:

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

    1) 设置一个规则页面,我称之为“模式”。这些模式设置为 A 列(从 A2 开始)为“名称”,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,加载 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)
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-18
      • 2011-07-31
      • 1970-01-01
      相关资源
      最近更新 更多