简单,不。我过去做过类似的事情,我就是这样做的。
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/