You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求修改VBA宏:实现两列字符串80%匹配判定功能

修改VBA宏实现基于匹配度的字符串判断

嘿,我帮你调整了VBA宏代码,把原来只对比前20字符的逻辑改成了按80%匹配度判断的需求。下面是完整的修改后的代码,还有关键改动的说明:

完整代码

Sub Macro1()
    ' Match Organization names with 80% similarity check
    Dim sht As Worksheet
    Dim LR As Long
    Dim i As Long
    Dim str As String, str1 As String
    Dim matchPercent As Double
    
    ' 替换成你的目标工作表名称
    Set sht = ActiveWorkbook.Worksheets("Sheet1")
    ' 假设客户类型列是A列,这里获取最后一行的行号,按需修改
    LR = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row
    
    ' 从第2行开始遍历(跳过表头)
    For i = 2 To LR
        ' 判断当前行客户类型是否为"O"
        If sht.Cells(i, "A").Value = "O" Then
            ' 获取需要对比的两个字符串(假设在B列和C列,按需修改)
            str = Trim(sht.Cells(i, "B").Value)
            str1 = Trim(sht.Cells(i, "C").Value)
            
            ' 调用自定义函数计算匹配度
            matchPercent = GetMatchPercentage(str, str1)
            
            ' 根据匹配度输出结果(结果输出到D列,按需修改)
            sht.Cells(i, "D").Value = IIf(matchPercent >= 0.8, "ok", "check")
        End If
    Next i
End Sub

' 自定义函数:计算两个字符串的匹配度(相同位置字符数占较长字符串的比例)
Function GetMatchPercentage(str1 As String, str2 As String) As Double
    Dim minLen As Integer, maxLen As Integer
    Dim matchCount As Integer
    Dim i As Integer
    
    matchCount = 0
    minLen = IIf(Len(str1) < Len(str2), Len(str1), Len(str2))
    maxLen = IIf(Len(str1) > Len(str2), Len(str1), Len(str2))
    
    ' 处理空字符串的情况
    If maxLen = 0 Then
        GetMatchPercentage = 0
        Exit Function
    End If
    
    ' 逐字符对比相同位置的字符
    For i = 1 To minLen
        If Mid(str1, i, 1) = Mid(str2, i, 1) Then
            matchCount = matchCount + 1
        End If
    Next i
    
    ' 计算匹配度比例
    GetMatchPercentage = matchCount / maxLen
End Function

关键改动说明

  • 新增匹配度计算函数:GetMatchPercentage会统计两个字符串相同位置的字符数量,然后除以较长字符串的长度,得到匹配比例。
  • 替换原对比逻辑:不再只截取前20字符对比,而是计算完整字符串的匹配度;如果还是需要仅对比前20个字符,只需要修改字符串赋值部分:
    str = Trim(Left(sht.Cells(i, "B").Value, 20))
    str1 = Trim(Left(sht.Cells(i, "C").Value, 20))
    
  • 按匹配度输出结果:当匹配度≥80%时返回"ok",否则返回"check",结果输出列可以根据你的表格调整。

注意事项

  • 记得把代码中的工作表名称、列号(客户类型列、对比字符串列、结果列)改成你实际使用的位置。
  • 当前的匹配逻辑是逐位置字符匹配,如果需要更智能的匹配(比如忽略大小写、分词匹配),可以在GetMatchPercentage函数里进一步调整(比如先把字符串转成小写再对比)。

内容的提问来源于stack exchange,提问作者user2574

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:10:36