比较两个字符串值并返回公共字符串

时间:2014-07-08 17:45:50

标签: excel function match string-comparison

这就是我想在Excel中做的事情。

A1 =你好我的名字是约翰 B1 =你好我的名字是乔

C1 =你好,我的名字是

A2 =约翰明天出去的地方? B2 =乔明天出去哪儿?

C1 =在哪里

如您所见,我想比较2个单元格并返回公共字符串,直到存在差异。 (一旦有变化就停止比较)

我见过类似here的内容,但与我的要求略有不同。

提前致谢。

3 个答案:

答案 0 :(得分:1)

你应该寻找一种更有效的方式,但这里有一个在VBA:

Dim stringA As String
Dim stringB As String

Dim finalString As String

Dim currentLetter As Integer

For currentLetter = 0 To Len(stringA)
    If Left(stringA, currentLetter) = Left(stringB, currentLetter) Then
        finalString = Left(stringA, currentLetter)
        Exit For
    End If
Next

用你的单元替换字符串变量并完成它。

答案 1 :(得分:0)

我喜欢这个挑战,所以这里有一个我提出的公式解决方案:

=LEFT(A1,LOOKUP(2,1/(MID(LEFT(A1,MATCH(FALSE,INDEX(MID(A1,ROW($1:$99),1)=MID(B1,ROW($1:$99),1),),0)-1),ROW($1:$99),1)=" "),ROW($1:$99))-1)

答案 2 :(得分:-1)

Sub CommonText()
    'Finds the longest substring that string A and string B have in common.

    sA = "Hey, My Name is John"
    sB = "My Name is Eric"

    Dim iLtrA As Integer

    Dim iLtrB As Integer
    Dim sThisString As String
    Dim sFinalString As String

    sFinalString = ""

    For iLtrA = 1 To Len(sA)

        For iLtrB = 1 To Len(sB)

            For n = 1 To Application.Min(Len(sA), Len(sB))
                'mid(text,start, length)
                If Mid(sA, iLtrA, n) = Mid(sB, iLtrB, n) Then
                    sThisString = Mid(sA, iLtrA, n)
                    If Len(sThisString) >= Len(sFinalString) Then
                        sFinalString = sThisString
                    End If
                End If
            Next n
        Next iLtrB
    Next iLtrA

    Debug.Print sFinalString

End Sub