Excel中的模糊匹配查找

Excel中的模糊匹配查找,excel,vba,macos,vlookup,fuzzy-search,Excel,Vba,Macos,Vlookup,Fuzzy Search,我正在为我的财务状况写一份电子表格,需要一些帮助。我有一张交易表,希望能够通过另一张表上的一组规则自动分配每笔交易的账户 例如,我的事务如下所示: 2016年4月1日-5.9日茶的数量 2016年4月1日-8.5咖啡厅101附件编号 2016年4月1日-4.8热锅数量 我希望能够在查找表中有一组这样的规则: 背板275 倒计时300 投递箱275 热300 Z387 比萨小屋300 格雷厄姆184 其中,如果我的交易名称包含查找表中的内容,则会查找账号并将其放置在acc_num当前所在的

我正在为我的财务状况写一份电子表格,需要一些帮助。我有一张交易表,希望能够通过另一张表上的一组规则自动分配每笔交易的账户

例如,我的事务如下所示:

2016年4月1日-5.9日茶的数量
2016年4月1日-8.5咖啡厅101附件编号
2016年4月1日-4.8热锅数量

我希望能够在查找表中有一组这样的规则:

背板275
倒计时300
投递箱275
热300
Z387
比萨小屋300
格雷厄姆184

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

我曾经尝试过这样使用vlookup函数,但是没有用

=IF(C2=“”,”,VLOOKUP(“*”&C20&“*”,“图表规则”!$A$2:$C$1001,2,0))

我意识到上面的函数对查找值进行模糊匹配,而不是它在其中查找值的表

我将非常感谢任何关于如何做到这一点的建议!
干杯

这里是一个VBA解决方案,它实现了一个相当弱的模糊查找。也许它能在Mac电脑上运行,也许不能(当一位拥有Mac电脑的同事尝试运行我的一些程序时,我的经历有好有坏):

在此代码中,
s
被认为是
t
的模糊匹配,当且仅当
s类似于“*”&t&“*”
t类似于“*”&s&“*”
。换句话说,如果
s
t
的子串,或者反之亦然

如果Mac电脑的Excel VBA不知道
xlErrNA
,实验表明这只是2042年。如果未找到匹配项,则始终可以返回False而不是错误代码


搜索的线性性质意味着它可能无法很好地扩展,但它可能适用于您的应用程序。

Excel有一个模糊查找加载项,您可以下载:这里有一个使用它的教程:啊,我忘了提到@JohnColeman,我在OSX上,因此没有兼容的模糊查找下载。我可能会看看我是否能找到一个谷歌表单解决方案。我明白了。我随意添加了标签
excelvba-mac
,因为该标签的追随者可能比我更了解解决方案。我添加了一个纯vba函数,它应该在Mac上作为UDF(用户定义函数)工作,但它可能不够模糊。
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