我在Excel for Mac上运行VBA函数时遇到问题。
我想处理一系列字符串以删除字符串中的任何重复字符。例如:列1示出了原始字符串,而列2已经去除了任何重复字符。
|Original String | Duplicate Characters Removed
route | route
trout | trou
eater | eatr
brass | bras
seige | seig
smelt | smelt
我发现了一些VBA代码,声称可以做到这一点,但运行时返回#VALUE!。代码如下所示:
Function RemoveDupes1(pWorkRng As Range) As String
'Updateby Extendoffice
Dim xValue As String
Dim xChar As String
Dim xOutValue As String
Set xDic = CreateObject("Scripting.Dictionary")
xValue = pWorkRng.Value
For i = 1 To VBA.Len(xValue)
xChar = VBA.Mid(xValue, i, 1)
If xDic.Exists(xChar) Then
Else
xDic(xChar) = ""
xOutValue = xOutValue & xChar
End If
Next
RemoveDupes1 = xOutValue
End Function
我通过在单元格B2(其中A2保存列表中的第一个字符串)中输入= RemoveDupes 1(A2)来调用此函数,但是收到#VALUE!错误。
我不知道问题是出在VBA代码上(其他人似乎已经成功地使用了它,但可能没有在Mac上)还是出在我应用它的方式上(我并不真正了解VBA,但过去已经成功地应用了其他代码片段)。
1条答案
按热度按时间nzk0hqpo1#
正如罗恩在评论中所写的,Mac上没有
Scripting.Dictionary
--字典是 * 微软脚本库 *(scrrun.dll)的一部分,而dll(动态链接库)在Mac上不存在。现在,使用Dictionary进行重复检查通常是一个好主意,因为它非常快速且易于使用,然而,当涉及到简单检查字符串是否包含字符时,它有点矫枉过正。
下面的函数将把源字符串中的每个字符复制到目标字符串中(如果目标字符串中还没有)-使用
InStr
完成检查。我已经将参数类型更改为
Variant
,并使用函数CStr
将内容转换为字符串-使用该函数,您可以对几乎所有数据类型(范围、字符串,甚至数字或日期)调用该函数。更新:为了完整起见,我添加了一个可选的第二个参数,这样函数就可以不区分大小写(如果字符串包含一个大写和一个小写字符,则只复制其中一个)