0

我尝试了几乎所有的方法(CLEAN、TRIM、SUBSTITUTE)试图删除隐藏在文本开头和结尾的字符。就我而言,我从 oracle ERP 下载了物料清单报告,发现项目代码是隐藏字符的受害者。

经过这么多发现,我能够追踪隐藏了哪个字符,发现它是一个问号'?(通过另一个线程中的 VBA 代码)在前面和结尾。你可以拿这个货品代码:11301-21</p>

如果您将以上内容粘贴到您的 excel 中并查看其长度 =LEN(),您可以更好地理解我的问题。

我需要一个好的解决方案来解决这个问题。因此请帮忙!

非常感谢您提前。

4

2 回答 2

2

感谢Gary's Student,因为他的回答启发了我。

另外,我将此答案用于此代码。

此功能将清除数据的每个字符,因此它应该适合您。您需要 2 个功能:1 个用于清理 Unicode 字符,另一个用于清理您的项目代码_

        Public Function CLEAN_ITEM_CODE(ByRef ThisCell As Range) As String
    If ThisCell.Count > 1 Or ThisCell.Count < 1 Then
        CLEAN_ITEM_CODE = "Only single cells allowed"
        Exit Function
    End If


    Dim ZZ As Byte

    For ZZ = 1 To Len(ThisCell.Value) Step 1
        CLEAN_ITEM_CODE = CLEAN_ITEM_CODE & GetStrippedText(Mid(ThisCell.Value, ZZ, 1))
    Next ZZ


    End Function

    Private Function GetStrippedText(txt As String) As String
If txt = "–" Then
    GetStrippedText = "–"
Else
    Dim regEx As Object

    Set regEx = CreateObject("vbscript.regexp")
    regEx.Pattern = "[^\u0000-\u007F]"
    GetStrippedText = regEx.Replace(txt, "")
End If

End Function

这就是我在 Excel 中使用它作为公式的结果。注意字符串 Len 的区别:

在此处输入图像描述

希望这可以帮助

于 2018-03-21T12:28:25.507 回答
1

您的字符看起来像空格字符,但不是。它们是 UniCode 8236 和 8237。

只需将它们替换为空格字符(ASCII 32)即可。

编辑#1:

根据您帖子中的字符串,以下 VBA 宏将用简单的空格字符替换 Unicode 字符 8236 amd 8237:

Sub Kleanup()
Dim N1 As Long, N2 As Long
Dim Bad1 As String, Bad2 As String

N1 = 8237
Bad1 = ChrW(N1)
N2 = 8236
Bad2 = ChrW(N2)

Cells.Replace what:=Bad1, replacement:=" ", lookat:=xlPart
Cells.Replace what:=Bad2, replacement:=" ", lookat:=xlPart

End Sub
于 2018-03-21T11:56:35.980 回答