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

我正在寻找一个公式的帮助。

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

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

并不是所有的单元格都会匹配,但是对于部分文本匹配的单元格来说,就像"MATCH"

例如在单元格E2= 000034568MILL WALLI ,在单元格J2=WALLINGER应该带一个MATCH ,因为单元格E2中的WALLI匹配部分文本。

另一个例子:

E2= Benjamin P RouambaJ2=Roumbamoore应该带回匹配。

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

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

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

按“Alt + F11”,然后在菜单中选择“插入”>“模块”

 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是匹配必须具有的最less字符数。 因此,如果您指定2,则会计算包含2个字符,3个字符,4,5,6个字符的所有匹配项。这会减less重合次数。 如果是1,公式会计算每个“a”=“a”,letter =字母。

请让我知道,如果它适合你的工作正常!

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

Cells_fMatch

它返回!Err如果与input值(参数)有任何不一致的错误,如果findMatch ,则返回Match ,否则返回NO Match (返回值可以根据需要更改)

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

参数和说明:

sCll_1 :要比较的string1

sCll_2 :string2进行比较

iLenMin :可选匹配的比较string的最小长度。 数据types字节接受最大值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 

示例:要比较单元格E2J2匹配最less5个连续字符(值分别为000034568MILL WALLIWALLINGER )的000034568MILL WALLIWALLINGER使用以下公式:

 =Cells_fMatch(E2,J2,5) 

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

函数声明 , Dim语句 ,

If … Then … Else语句 , For … Next语句 , InStr函数 。