Excel中的模糊匹配查找

我正在为我的财务编写一个电子表格,需要一点帮助。 我有一张交易表,希望能够通过另一张表上的一组规则自动化每个交易分配的帐户。

我的交易例如是这样的: 1/04/16 -5.9 TEA'S ME acc_num 1/04/16 -8.5 CAFE 101 acc_num 1/04/16 -4.8 HOT WOK acc_num

我希望能够在查找表中find这样一组规则: Backblaze 275 Countdown 300 Dropbox 275 Hot 300 Z 387 Pizzahut 300 Graham 184

如果我的交易名称包含查找表中的某些内容,则查找帐号并将其放置在acc_num当前所在的单元格中。

我已经尝试使用像这样的查找function,但无济于事。

=IF(C2="", "", VLOOKUP("*"&C20&"*",'Chart Rules'!$A$2:$C$1001,2,0))

我意识到上述函数在查找值上进行了模糊匹配,而不是查找值中的表。

我将不胜感激在如何做到这一点的任何build议! 干杯

这是一个VBA解决scheme,实现了一个相当弱的模糊查找。 也许它可以在Mac上运行,也许不会(当一个拥有Mac的同事试图运行我的一些程序时,我曾经有过混合的经历):

 Function FLOOKUP(pat As String, arr As Variant, ColNum As Long, Optional CaseSensitive = True) As Variant 'does a linear search of first column of array or range arr until it finds a 'string which is a fuzzy match for pat, returning the corresponding 'entry in column ColNum of arr. If no match is found NA is returned Dim A As Variant, i As Long, s As String, p As String, pStar As String p = IIf(CaseSensitive, pat, UCase(pat)) pStar = "*" & p & "*" If TypeName(arr) = "Range" Then A = arr.Value Else A = arr End If For i = LBound(A) To UBound(A) s = A(i, 1) If Not CaseSensitive Then s = UCase(s) If p Like "*" & s & "*" Or s Like pStar Then FLOOKUP = A(i, ColNum) Exit Function End If Next i FLOOKUP = CVErr(xlErrNA) End Function 

在这个代码中, s被认为是t的模糊匹配,当且仅当s Like "*" & t & "*"t Like "*" & s & "*" 。 换句话说,如果st的子串,反之亦然。

如果用于Mac的Excel VBA不知道xlErrNA ,实验表明这只是2042年。如果找不到匹配,您总是可以返回False而不是错误代码。

search的线性意味着它可能不会很好地扩展,但也许它将适用于您的应用程序。