在 excel 中隐藏 space
hidden space in excel
我尝试了几乎所有方法(CLEAN、TRIM、SUBSTITUTE)试图删除隐藏在文本开头和结尾的字符。就我而言,我从 oracle ERP 下载了 material 报告的账单,发现项目代码是隐藏字符的受害者。
查了这么多,终于查到是哪个字符被隐藏了,原来是问号'?' (通过另一个线程中的 VBA 代码)在前端和末尾。您可以拿这个商品编码:11301-21
如果您将以上内容粘贴到您的 excel 中并查看其长度 =LEN(),您可以更好地理解我的问题。
我需要一个好的解决方案来解决这个问题。所以请帮忙!
非常感谢您。
您有一些角色看起来像space角色,但实际上不是。它们是 UniCode 8236 和 8237。
只需将它们替换为 space 字符 (ASCII 32).
编辑#1:
根据您 post 中的字符串,以下 VBA 宏将用简单的 space 字符替换 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
感谢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 中使用它作为公式的结果。注意字符串长度的区别:
希望对您有所帮助
我尝试了几乎所有方法(CLEAN、TRIM、SUBSTITUTE)试图删除隐藏在文本开头和结尾的字符。就我而言,我从 oracle ERP 下载了 material 报告的账单,发现项目代码是隐藏字符的受害者。
查了这么多,终于查到是哪个字符被隐藏了,原来是问号'?' (通过另一个线程中的 VBA 代码)在前端和末尾。您可以拿这个商品编码:11301-21
如果您将以上内容粘贴到您的 excel 中并查看其长度 =LEN(),您可以更好地理解我的问题。
我需要一个好的解决方案来解决这个问题。所以请帮忙!
非常感谢您。
您有一些角色看起来像space角色,但实际上不是。它们是 UniCode 8236 和 8237。
只需将它们替换为 space 字符 (ASCII 32).
编辑#1:
根据您 post 中的字符串,以下 VBA 宏将用简单的 space 字符替换 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
感谢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 中使用它作为公式的结果。注意字符串长度的区别:
希望对您有所帮助