vba搜索替换字符

时间:2013-12-21 18:52:31

标签: excel excel-vba-mac chr

我正在尝试为excel vba中的报告准备电子表格。不幸的是,这里有一些需要更换的奇怪角色。很容易,除了这个特点:

  ¦

我似乎无法将该字符粘贴到编辑器中的字符串替换函数中。当我尝试时,输出为_。然后我想通过它的Chr代码来引用它。快速查看说是Chr(166)。 http://www.gtwiki.org/mwiki/?title=VB_Chr_Values

Replace(s, "â€" + Chr(166), "...")

但这根本不是那个角色(至少在Mac excel上)。我试过了:

For i = 1 To 255
   Debug.Print Chr(i)
Next i

我在任何地方都没有看到这个角色。有谁知道如何在vba代码中引用这个字符以替换它?

3 个答案:

答案 0 :(得分:0)

单击包含恶意字符的单元格并运行此小宏:

Sub WhatIsIt()
    Dim s As String, mesage As String
    Dim L As Long
    s = ActiveCell.Text
    L = Len(s)
    For i = 1 To L
        ch = Mid(s, i, 1)
        cd = Asc(ch)
        mesage = mesage & ch & "     " & cd & vbCrLf
    Next i
    MsgBox mesage
End Sub

它应该显示单元格中的字符及其代码。

答案 1 :(得分:0)

这很脏,但这是我用来解决这个问题的解决方法。我知道我的问题角色在"â€"后总是总是,所以我的想法是更换那些后面的角色2.我真的不知道如何替换某个角色的角色在一个字符串中,所以我的想法是将字符串转换为一个字符数组并替换那些特定索引处的数组。这是它的样子:

Do While InStr(s, "â€") > 1
    num2 = InStr(s, "â€")
    arr = stringToArray(s)
    arr(num2 - 1) = "<~>"
    arr(num2) = "<~>"
    arr(num2 + 1) = "<~>"

    s = Replace(arrayToString(arr), "<~><~><~>", "...")
Loop

...


Function stringToArray(ByVal my_string As String) As Variant
    Dim buff() As String
    ReDim buff(Len(my_string) - 1)
    For i = 1 To Len(my_string)
        buff(i - 1) = Mid$(my_string, i, 1)
    Next
stringToArray = buff
End Function

Function arrayToString(ByVal arr As Variant) As String
Dim s As String
    For Each j In arr
        s = s & j
    Next j
arrayToString = s
End Function

在实践中,我用这些索引取代的东西必须是独一无二的,但却是可识别的。然后我可以用我想要的任何东西替换我的独特角色。肯定有边缘情况,但现在它完成了工作。 stringToArray函数来自:Split string into array of characters?

答案 2 :(得分:0)

不确定是否有,但您可以大大简化现有代码,如下所示。

使用样本Strin

Dim strIn As String
strIn = "1â€1â€x123"
Do While InStr(strIn, "â€") > 0
Mid$(strIn, InStr(strIn, "â€"), 3) = "..."
Loop