excel - 从 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
解决方案
像这样的东西?
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
演示:
注意:它只会将第一个字符串与第二个字符串进行比较,没有反之亦然。如果这是您可以相应地操作当前代码的要求。
推荐阅读
- c# - .NET Core 3.1 API 调用使用 Windows 身份验证保护的 .NET Framework WCF 服务(AD 组)
- python - 如何使用 tkinter 在 python 中选择多个文件或整个文件夹(显示它包含的所有文件的名称)?
- python - 用于抓取多个页面标题的 Python 问题
- python - 搜索栏带来空白结果页面
- jquery - 通过ajax刷新后重新绑定jquery插件
- r - 无法使用 ggPredict 可视化线性回归
- java - 如何在 IntelliJ 中将目录转换为包
- python - 使用 Plotly add_trace go.scatter for-loop 填充仅具有唯一跟踪名称的图例
- spring-boot - 使用 DiscoveryClient 读取 Eureka 服务器实例的问题
- python - 有没有办法从 PHP 7.4.7 调用 Python3 函数?