Excel公式比较部分匹配单元格

时间:2017-04-07 19:43:51

标签: excel excel-formula

我正在寻找公式的帮助。

我需要比较两个单元格(而不是列)中的文本。

其中一个单元格具有姓氏,另一个单元格可能包含姓氏的一部分,附加数字和字母(不按任何特定顺序)。这些是我们想要找到的对。

并非所有单元格都匹配,但对于文本部分匹配的单元格,则需要"MATCH"之类的单元格。

例如,在单元格E2= 000034568MILL WALLI和单元格J2=WALLINGER中应该带有MATCH,因为单元格WALLI中的E2与文本的一部分匹配。< / p>

另一个例子:

E2= Benjamin P RouambaJ2=Roumbamoore应该带回来。

我希望这是有道理的,并且有一个可能的公式。

2 个答案:

答案 0 :(得分:1)

Excel中没有内置功能可以满足您的需求。您需要在VBA项目模块中自定义您自己的公式。所以我设法编写了一个计算匹配数的函数。 Adter将其设置为模块,您可以将其用作工作表中的常规公式。

如果您不熟悉VBA编程,请不要担心。按照说明将下面的代码复制到VBA模块中。

Press 'Alt+F11' and, in the menu, select Insert > Module

Function CountPartialMatch(R1 As String, R2 As String, M As Long) As Long

    Dim n As Long, L1 As Integer, L2 As Integer, Min As Integer, C As Integer, S1 As Integer, S2 As Integer
    n = 0
    L1 = Len(R1)
    L2 = Len(R2)
    Min = Application.WorksheetFunction.Min(L1, L2)

    For C = M To Min
        For S1 = 1 To (L1 - (C - 1))
            For S2 = 1 To (L2 - (C - 1))
                If Mid(R1, S1, C) = Mid(R2, S2, C) Then n = n + 1
                Next S2
            Next S1
        Next C

    CountPartialMatch = n

End Function

此公式需要3个参数:

=CountPartialMatch(First_Cell, Second_Cell, Min_Chrt)

参数Min_Chrt是匹配必须具有的最小字符数。因此,如果您声明2,它将计算所有匹配2个字符,3个字符,4,5,6 ...它减少了巧合的数量。如果为1,则公式将计为每个“a”=“a”,字母=字母。

请告诉我它是否适合您!

答案 1 :(得分:0)

如果您愿意使用 VBA用户定义函数,您可以试试这个:

<强> Cells_fMatch

如果输入值(arguments)出现任何不一致错误,则返回!Err,如果找到匹配则返回Match,否则返回NO Match } (可以根据需要更改返回值)

语法: Cells_fMatch( sCll_1, sCll_2[, iLenMin] )

参数&amp;说明

sCll_1 :要比较的字符串1

sCll_2 :要比较的字符串2

iLenMin :可选匹配的比较字符串的最小长度。默认值为1. 数据类型字节接受最大值255,如果需要更长的长度,则相应地更改

该函数结合了For...Next语句和Instr函数来执行比较,从而提供快速准确的结果。

Public Function Cells_fMatch(sCll_1 As String, sCll_2 As String, Optional iLenMin As Byte = 1) As String
Dim blCllMatch As Boolean
Dim sCllVal As String
Dim i As Integer

    Rem Set Default Result
    Cells_fMatch = "!Err"

    Rem Validate Input
    If Len(sCll_1) < iLenMin Then Exit Function
    If Len(sCll_2) < iLenMin Then Exit Function

    Rem Compare Cell Values
    For i = 1 To (1 + Len(sCll_1) - iLenMin)
        sCllVal = Mid(sCll_1, i, iLenMin)
        If InStr(sCll_2, sCllVal) > 0 Then
            blCllMatch = True
            Exit For
    End If: Next

    Rem Set Results
    Cells_fMatch = IIf(blCllMatch, "Match", "NO MATCH")

End Function

示例: 要比较匹配至少5个连续字符(值E2J2的单元格000034568MILL WALLIWALLINGER中的字符串,请使用以下公式:

=Cells_fMatch(E2,J2,5)

这些页面将进一步解释函数中使用的资源:

Function StatementDim Statement

If...Then...Else StatementFor...Next StatementInStr Function