因此,我找到了数百万种方法来仅显示单元格范围内的唯一值,但对此却无能为力。我想要做的是比较两个单元格(或范围)并仅返回未重复的值。例如,如果两个单元格包含单词 Ursine 和 Bovine,它将返回已删除的URSBOV
e、n 和 i。
前任。
Column 1----column 2---column 3(result)
"Ursine"-------"Bovine"-----"URSBOV"
"Canine"------"Feline"-------"FLCA"
答案1
尽管我认为存在更有效的算法,但以下 VBA 例程仍可行。
它被写成一个函数。
- 将两个字符串合并为一个
- 第一个字符在字符串中是否出现多次
- 如果不是,则检查下一个字符
- 如果匹配,则删除所有匹配的字符
- 重复,直到检查完所有字符
我使用递归子程序来执行此操作,但我对此没有太多经验。但它似乎确实返回了所需的输出。
Option Explicit
Option Compare Text
Function UniqueChars(s1 As String, s2 As String)
Dim S As String
S = s1 & s2
RemoveDups S, 1
UniqueChars = UCase(S)
End Function
Sub RemoveDups(ByRef S As String, ByVal NDX As Long)
Dim Ltr As String * 1
If NDX > Len(S) Then Exit Sub
Ltr = Mid(S, NDX)
If Len(S) = Len(Replace(S, Ltr, "")) + 1 Then 'unique character
NDX = NDX + 1
Else
S = Replace(S, Ltr, "")
End If
RemoveDups S, NDX
End Sub
请注意,如果您不想使用Option Compare Text
该模块,则可以在 VBA 函数中单独将比较模式指定为可选参数Replace
。我不确定哪个更有效。