首页 > 解决方案 > 从 Col1 和 Col2 中的文本写入 Col3 中的不匹配数据

问题描述

我有两组数据,一组是带有修订版的零件编号列表(有些没有修订版)和相同零件的未修订列表。多年来,这些都是由管理员手动输入的,现在我需要创建一组数据,即 Part Number, Revision。

由于过去发生的任何疯狂行为,修订版可能会出现在零件编号的随机点上,每次我这么说我都会感到不寒而栗!

因此,我需要一次将字符串 1 与字符串 2 比较一个字母,并用差异填充一个临时字符串。字符串 1 将带有修订,字符串 2 将没有,并且由于人为错误,字符串 2 可能不仅仅是省略了修订,因此需要显示这些以供手动检查。

我发现了一些很接近的东西,但是我对 VBA 的理解不足以让我进步。

Function WORDDIF(rngA As Range, rngB As Range) As String

Dim WordsA As Variant, WordsB As Variant
Dim ndxA As Long, ndxB As Long, strTemp As String

WordsA = Split(rngA.Text, " ")
WordsB = Split(rngB.Text, " ")

For ndxB = LBound(WordsB) To UBound(WordsB)
    For ndxA = LBound(WordsA) To UBound(WordsA)
        If StrComp(WordsA(ndxA), WordsB(ndxB), vbTextCompare) = 0 Then
            WordsA(ndxA) = vbNullString
            Exit For
        End If
    Next ndxA
Next ndxB

For ndxA = LBound(WordsA) To UBound(WordsA)
    If WordsA(ndxA) <> vbNullString Then strTemp = strTemp & WordsA(ndxA) & " "
Next ndxA

WORDDIF = Trim(strTemp)

End Function

我希望看到比较字符串中的每个字母,一旦在字符串 2 中发现不匹配,修订字符串就会填充该不匹配。比较将继续在字符串 1 上的同一个字母上进行,直到在字符串 2 中找到匹配项。例如:

String 1 = 123-2A3-456
String 2 = 123-23-456
Revision = A

String 1 = 123-2A3-456
String 2 = 123-23-46
Revision = A5

标签: excelvba

解决方案


像这样的东西?

Function WORDDIF(rngA As Range, rngB As Range) As String

Dim WordsA As Variant, WordsB As Variant
Dim ndxA As Long, ndxB As Long, strTemp As String

Dim a As Integer
Dim b As Integer

a = Len(rngA.Text)
b = 1
txt = ""

For i = 1 To a

    If Mid(rngA.Text, i, 1) = Mid(rngB.Text, b, 1) Then
        b = b + 1
    Else
        txt = txt & Mid(rngA.Text, i, 1)
    End If

Next


WORDDIF = txt

End Function

演示:

在此处输入图像描述

注意:它只会将第一个字符串与第二个字符串进行比较,没有反之亦然。如果这是您可以相应地操作当前代码的要求。


推荐阅读