当前位置: 首页 > 知识库问答 >
问题:

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

督冠玉
2023-03-14

我在寻求公式方面的帮助。

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

其中一个单元格有姓氏,另一个单元格可能有姓氏的一部分,并带有其他数字和字母(不按任何特定顺序)。这些是我们想要定位的对。

并非所有的单元格都匹配,但是对于部分文本匹配的单元格,会像< code >“MATCH”这样。

例如,在单元格E2=000034568MILL WALLI和单元格J2=WALLINGERMATCH,因为单元格E2中的WALLI与部分文本匹配。

另一个例子:

< code>E2=本杰明·P·罗阿姆巴和< code > E2 =鲁姆巴摩尔应该带回匹配。

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

共有2个答案

廉高邈
2023-03-14

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

单元格_匹配

它返回!Err如果与输入值(参数)有任何不一致的错误,如果找到匹配项,则返回Match,否则返回NO Match(返回值可以根据需要更改)。

语法: Cells_fMatch( sCll_1, sCll_2[, 爱尔兰列伊明] )

论据

sCll_1:要比较的字符串1

sCll_2:要比较的字符串 2

iLenMin :要比较的字符串的可选最小长度。默认值为 1。数据类型 byte 接受最大值 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中的字符串,至少匹配5个连续字符(分别为值000034568MILL WALLI和WALLINGER),请使用以下公式:

=Cells_fMatch(E2,J2,5)

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

函数语句,暗淡语句,

如果。。。然后。。。否则声明,对于...下一条语句,函数。

华鹭洋
2023-03-14

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

如果你不熟悉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 是匹配项必须包含的最小字符数。因此,如果您声明2,它将计算所有具有2个字符,3个字符,4,5,6...它减少了巧合的数量。如果它是1,公式将计算每个“a”= “a”,字母=字母。

请让我知道它是否适合你!

 类似资料:
  • 我在一个3000行的excel工作表中有一个简单的公式,有没有办法只返回一定百分比的顶部匹配单元格。我只想显示符合我条件的前 9%(270 行)并隐藏其他行 这是我的公式: 我用数据透视表做了这件事,但想在同一个表格中用同一个公式添加它以得到我需要的东西。谢谢。

  • 我在工作表选项卡的大量行中使用INDEX/MATCH组合来定位同一工作表的另一个选项卡中的单元格值,并返回第二个工作表中另一列的内容。 索引/匹配公式 虽然这对于大多数行来说都很好,但我发现少数行不行——单元格显示“#N/A”。那些不起作用的都是寻找以“1/”开头的单元格(忽略引号)。 谁能帮我解释一下为什么会这样?

  • 我正在使用apache POI更改excel表中的单元格。更改值后,与已更改的单元格对应的公式的单元格不会更新。 当我进入excel并单击带有公式的单元格,然后在函数栏中单击时,公式会更新。 A1仍然等于3,直到我点击那个单元格。 刷新工作簿或工作表也不起作用。这是excel或POI的问题吗?有人能想出一个变通办法吗?

  • 我正在开发一个上传excel文件并将其值插入数据库的应用程序。 我的代码如下: 所以当我上传一个像下面这样的excel文件时,它会工作并将其数据插入db。 但是,当我上传像以下这样的excel文件时,db不会更新。 我可以问你如何解决这个问题,所以即使单元格的值是=ROUNDUP((600),2),而不是600,它仍然更新db。 提前谢谢你。

  • 问题内容: 我必须将 算法从Excel工作表移植到python代码, 但必须对 Excel文件中的算法 进行 反向工程 。 Excel工作表非常复杂,它包含许多单元格,在这些单元格中有引用其他单元格的公式(也可以包含公式或常数)。 我的想法是使用python脚本分析工作表,以构建一种单元格之间的依存关系表,即: A1取决于B4,C5,E7公式:“ = sqrt(B4)+ C5 * E7” A2取决

  • 目前,我有一个脚本,从一个excel表复制数据,并粘贴在SAP中的事务代码Scal。 我的代码所做的是,根据每个ID(例如AA/AB)过滤日历选择,然后将开始日期和结束日期的数据复制到scal ID中。保存更改,然后移到下一个ID。 假设我有一个excel表,同一日历ID有多个条目。如何使excel检查下一行是否与当前一行具有相同的日历ID,然后不保存,而是复制并粘贴相同ID的开始/结束日期,然后