【问题标题】:vba search replace charactervba搜索替换字符
【发布时间】:2013-12-21 18:52:31
【问题描述】:

我正在尝试为 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 代码中引用这个字符来替换它?

【问题讨论】:

  • 使用command+f 查找/替换¦ 为我工作。我正在使用带有 Excel 2008 的 Mac。
  • 是的,但我需要通过 vba 宏来完成。
  • pnuts,它似乎不起作用。
  • +1 当今一大堆坏问题中的一个好问题

标签: excel vba macos chr


【解决方案1】:

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

使用示例Strin

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

【讨论】:

    【解决方案2】:

    点击一个包含你的恶意角色的单元格并运行这个小宏:

    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
    

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

    【讨论】:

    • 这似乎不起作用。它不断出现 Chr(95),它是 _,而不是我想要的。
    【解决方案3】:

    这很脏,但这是我用来解决此问题的解决方法。我知道我的问题字符是 always"â€" 之后,所以我的想法是替换那些 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?

    【讨论】:

    猜你喜欢
    • 2013-03-08
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-02
    相关资源
    最近更新 更多