我正在为我的财务编写电子表格,需要一些帮助。我有一张交易,希望能够通过另一张纸上的一套规则自动化每笔交易所分配的帐户。
我的交易例如如下所示:
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
我希望能够在查找表中拥有这样的一组规则:
Backblaze 275
Countdown 300
Dropbox 275
Hot 300
Z 387
Pizzahut 300
Graham 184
如果我的交易名称包含查询表中的内容,则会查找帐号并将其放在acc_num当前所在的单元格中。
我尝试过使用像这样的vlookup函数,但无济于事。
=IF(C2="", "", VLOOKUP("*"&C20&"*",'Chart Rules'!$A$2:$C$1001,2,0))
我意识到上面的函数对查找值进行了模糊匹配,而不是它正在寻找值的表。
我很感激有关如何做到这一点的任何建议! 干杯
答案 0 :(得分:0)
这是一个VBA解决方案,它实现了相当弱的模糊查找。也许它可以在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 & "*"
时。换句话说,如果s
是t
的子字符串,反之亦然。
如果Mac的Excel VBA不了解xlErrNA
,那么实验表明这只是2042年。您可以随时返回如果找不到匹配项,则为False而不是错误代码。
搜索的线性特性意味着它可能不会很好地扩展,但也许它适用于您的应用程序。