У Судхакара есть данные в столбце 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.