我有一个字符串列表,其中一些字符串包含重复的内容。
例如:
13-十六烯酸; 13-甲基-4-十五烯酸; 14-甲基-6-十五烯酸; 15-十六烷羧酸内酯; 3-十六烯酸; 4-十六烯酸; 13-十六烯酸; 13-甲基-4-十五烯酸; 14-甲基-6-十五烯酸; 15-十六烷羧酸内酯; 3-十六烯酸; 4-十六烯酸;
我在网上找到了一个宏,并进行了修改以解决我的问题,代码如下:
Function stringOfUniques(inputString As String) As String
Dim inArray() As String
Dim xVal As Variant
inArray = Split(inputString, ";")
For Each xVal In inArray
If InStr(stringOfUniques, Trim(xVal)) = 0 Then _
stringOfUniques = stringOfUniques & Trim(xVal) & ","
Next xVal
End Function
对于我的一些字符串,这个方法效果很好。然而对于上面的例子,它会返回已去重的字符串,但奇怪的是会移除“3-十六碳烯酸”这个词的两个副本。所以基本上我应该得到:
13-十六烯酸;13-甲基-4-十五烯酸;14-甲基-6-十五烯酸;15-十六醇内酯;3-十六碳烯酸;4-十六碳烯酸;
实际上我得到了:
13-十六烯酸;13-甲基-4-十五烯酸;14-甲基-6-十五烯酸;15-十六醇内酯;4-十六碳烯酸;
我的代码有什么问题吗?
InStr
有关 -> 返回一个整数,指定一个字符串在另一个字符串中第一次出现的起始位置. 所以它可能会将13-十六烯酸
视为3-十六烯酸
的重复项。因此,即使删除了第一个3-十六烯酸
,它仍然会找到13-十六烯酸
并删除第二个。 - chancea