Обрезка всех пробелов (Microsoft Excel)
У Судхакара есть данные в столбце A, в конце которого есть пробелы. Если он использует функцию TRIM для данных, она удаляет некоторые конечные пробелы, но не все из них. Он задается вопросом, почему некоторые пробелы будут пропущены и как удалить их все.
На самом деле есть несколько разных способов решения этой проблемы.
Правильный метод для ваших целей неизменно будет зависеть от характера данных, которые вы используете.
Прежде всего, если вы используете TRIM для ячейки, помните, что он удаляет только пробелы. Это, по определению, означает, что удаляются только символы с кодом ASCII 32. К сожалению, есть другие символы ASCII, которые отображаются как «пробелы», но на самом деле не являются пробелами. TRIM не удалит их.
Было бы полезно, если бы вы могли понять, что это за надоедливые персонажи, верно? Что ж, если текст в ячейке не такой длинный, вот небольшой удобный макрос, который будет смотреть на содержимое ячейки и отображать каждый символ по очереди вместе с его значением ASCII:
Sub StringContents() Dim sTemp As String Dim sMsg As String Dim J As Integer If Selection.Cells.Count > 1 Then sMsg = "Please select only one cell" Else sMsg = "Full string: >" & ActiveCell.Value & "<" & vbCrLf For J = 1 To Len(ActiveCell.Value) sTemp = Mid(ActiveCell.Value, J, 1) sMsg = sMsg & ">" & sTemp & "< " & Asc(sTemp) & vbCrLf Next J End If MsgBox sMsg End Sub
Чтобы использовать макрос, просто выберите одну ячейку, которую вы хотите протестировать, и запустите ее. В итоге вы получите окно сообщения, в котором отображается вся строка вместе с каждым отдельным символом в строке.
Как только вы узнаете значение ASCII оскорбительного символа, который TRIM не удалит, вы можете выполнить замену этого символа. Например, если пробел показывает значение ASCII 160, вы можете выполнить замену следующим образом:
=SUBSTITUTE(A1,CHAR(160)," ")
Это заменяет фактический символ пробела на любые символы ASCII 160 в строке. Аналогичным образом вы можете удалить другие похожие фиктивные пробелы.
Конечно, вы можете попробовать использовать другую функцию Excel, чтобы избавиться от некоторых непечатаемых символов ASCII, например:
=CLEAN(A1)
Он не избавится от всего, но он хорошо справится с очисткой многих оскорбительных персонажей.
Вы даже можете начать комбинировать функции в своей формуле очистки следующим образом:
=TRIM(CLEAN(A1))
Вы можете сделать еще один шаг, например:
=TRIM(SUBSTITUTE(CLEAN(A2),CHAR(160)," "))
Эта формула избавляется от символов ASCII 160, а также от вещей, перехваченных CLEAN, а затем выполняет TRIM для этого результата.
Если вам нужно очистить довольно много ячеек или если вам нужно регулярно очищать ячейки, вы можете рассмотреть возможность использования макроса для выполнения тяжелой работы. Следующий макрос избавится от множества непечатаемых символов, оставив только видимые символы и знаки препинания.
Sub CleanCells() Dim rTarget As Range Dim c As Range Dim sTemp As String Dim J As Integer Set rTarget = Selection.SpecialCells(xlCellTypeConstants, 2) For Each c In rTarget sTemp = c.Value For J = 1 To 31 sTemp = Replace(sTemp, Chr(J), " ") Next J For J = 127 To 255 sTemp = Replace(sTemp, Chr(J), " ") Next J c.Value = sTemp Next c End Sub
Макрос работает только с теми ячейками в текущем выделении, которые содержат постоянные значения. Другими словами, те ячейки, в которых нет формул.
ExcelTips — ваш источник экономичного обучения Microsoft Excel.
Этот совет (5132) применим к Microsoft Excel 2007, 2010, 2013 и 2016.