Excel公式比较部分匹配单元格
我正在寻找一个公式的帮助。
我需要比较两个单元格(不是列)中的文本。
其中一个单元格有一个姓氏,另一个单元格可能会有一部分姓氏和附加的数字和字母(不是以任何特定的顺序)。 这些是我们想要find的对。
并不是所有的单元格都会匹配,但是对于部分文本匹配的单元格来说,就像"MATCH"
。
例如在单元格E2= 000034568MILL WALLI
,在单元格J2=WALLINGER
应该带一个MATCH
,因为单元格E2
中的WALLI
匹配部分文本。
另一个例子:
E2= Benjamin P Rouamba
和J2=Roumbamoore
应该带回匹配。
我希望这是有道理的,有一个可能的公式。
Excel中没有内置函数可以满足您的需求。 您需要在VBA项目模块中自定义您自己的公式。 所以我设法编写一个函数来计算匹配的次数。 将其设置为模块后,可以在工作表中将其用作普通公式。
如果你不熟悉VBA编程,不要担心。 按照说明将以下代码复制到VBA模块中。
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
示例:要比较单元格E2
和J2
匹配最less5个连续字符(值分别为000034568MILL WALLI
和WALLINGER
)的000034568MILL WALLI
, WALLINGER
使用以下公式:
=Cells_fMatch(E2,J2,5)
这些页面将进一步解释函数中使用的资源:
函数声明 , Dim语句 ,
If … Then … Else语句 , For … Next语句 , InStr函数 。