Sudhakar在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

要使用宏,只需选择要测试的单个单元格,然后运行它。您最终得到一个消息框,其中显示完整的字符串以及字符串中的每个单独字符。

一旦知道了TRIM不会删除的有害字符的ASCII值,就可以替换该字符。例如,如果非空格空间显示的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。