Скрытое пространство в Excel
Я попробовал почти все методы (CLEAN,TRIM,SUBSTITUTE), пытаясь удалить символ, скрывающийся в начале и конце текста. В моем случае я скачал отчет о материалах из oracle ERP и обнаружил, что коды предметов являются жертвой скрытых символов.
После стольких открытий я смог отследить, какой персонаж спрятан, и обнаружил, что это вопросительный знак '?' (с помощью кода VBA в другом потоке) как в начале, так и в конце. Вы можете взять этот код товара: 11301-21
Если вы вставите вышеперечисленное в ваш Excel и увидите его длину =LEN(), вы сможете лучше понять мою проблему.
Мне нужно хорошее решение этой проблемы. Поэтому, пожалуйста, помогите!
Заранее большое спасибо.
2 ответа
Спасибо Gary's Student, потому что его ответ вдохновил меня.
Кроме того, я использовал этот ответ для этого кода.
Эта функция будет очищать каждый символ ваших данных, поэтому она должна работать для вас. Вам нужно 2 функции: одна для очистки символов 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. Обратите внимание на разницу в длине строк:
Надеюсь это поможет
У вас есть персонажи, похожие на символы пробела, но это не так. Это UniCode 8236 и 8237.
Просто замените их пробелом (ASCII 32).
EDIT # 1:
Основываясь на строке в вашем посте, следующий макрос VBA заменит символы UniCode 8236 и 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