gpt4 book ai didi

excel - Excel 中的模糊匹配查找

转载 作者:行者123 更新时间:2023-12-02 22:39:20 25 4
gpt4 key购买 nike

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

例如,我的交易如下所示:
2016 年 1 月 4 日 -5.9 TEA'S ME acc_num
2016 年 1 月 4 日 -8.5 CAFE 101 acc_num
2016 年 1 月 4 日 -4.8 热锅 acc_num

我希望能够在查找表中拥有一组这样的规则:
逆光275
倒计时300
Dropbox 275
热门 300
Z 387
必胜客300
格雷厄姆 184

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

我尝试过使用像这样的 vlookup 函数,但没有成功。

=IF(C2="", "", VLOOKUP("*"&C20&"*",'图表规则'!$A$2:$C$1001,2,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 Like "*"& t & "*"< 时,s 才被视为 t 的模糊匹配t 像“*”和 s &“*”。换句话说,如果 st 的子字符串,反之亦然。

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

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

关于excel - Excel 中的模糊匹配查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39435804/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com