【问题标题】:Trimming spaces修剪空间
【发布时间】:2020-02-11 22:14:18
【问题描述】:

我正在尝试从某个范围内的所有 Excel 单元格中解析左右空格、nbsp、\n、\t 等。

我正在使用以下宏:

Sub TRIM_CELLS()

    'Clean all conditional formating
    Cells.FormatConditions.Delete

    'improve performance
    Application.ScreenUpdating = False

    Dim all_cells_range As String
    all_cells_range = "A1:A10"

    'Trim all those cells
    Range(all_cells_range).Select
    For Each cell In Selection.Cells
        cell.Value = Application.Substitute(Application.Substitute(CStr(cell.Value), vbLf, vbCr), vbCr, "")
        cell = WorksheetFunction.Trim((Application.Clean(Replace(cell.Value, Chr(160), " "))))
    Next cell
End Sub

诸如“Maria Tavares”之类的内容没有得到正确修剪。

【问题讨论】:

标签: excel vba trim


【解决方案1】:

最终用那个“空格”替换...不是一个很好的解决方案,但解决了我的问题...只是想知道它是什么字符...

Sub TRIM_CELLS()

'Clean all conditional formating
Cells.FormatConditions.Delete

'improve performance
Application.ScreenUpdating = False

Dim all_cells_range As String
all_cells_range = "A1:A2"
Range(all_cells_range).Select
For Each cell In Selection.Cells
    cell.Replace What:=" ", Replacement:=" ", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
    cell.Value = Application.Substitute(Application.Substitute(CStr(cell.Value), vbLf, vbCr), vbCr, "")
    cell.Value = WorksheetFunction.Trim(cell)
Next cell

end sub

【讨论】:

    【解决方案2】:

    我使用一个函数来删除您定义的任何特殊字符。

    Function RemoveSpecialCharacters(wks As Worksheet, strRange As String, var As Variant)
    Dim rngAddress As Range, cell As Range, I&
    
    'e.g strRange - "E2:E"
    
    With wks
    Set rngAddress = .Range(strRange & .Cells(Rows.count, "A").End(xlUp).row)
    
      For I = LBound(var) To UBound(var)
        For Each cell In rngAddress
                cell = WorksheetFunction.Substitute(cell, var(I), " ")
                    Else
                cell = WorksheetFunction.Substitute(cell, var(I), "")
        Next cell
      Next I
    End With
    
    End Function
    

    你可以这样调用函数:

    RemoveSpecialCharacters worksheetname, "A1:A", Array(Chr(9), Chr(10), Chr(13), Chr(39))

    其中Chr(10) 是换行符,chr(9) 是制表符等。

    查看此link 了解其他Chr 代码的含义。

    更新:

    试试这个从单元格中删除奇怪的“间谍”字符。

    RemoveSpecialCharacters worksheetname, "A1:A", Array(Chr(160))

    【讨论】:

      【解决方案3】:

      @Nick:我尝试使用您的想法,我认为问题出在 char 本身...假设以下循环按预期工作,我会得到导致问题的 char。

      看看这张图片:

      但是在那个地方什么都没有打印出来。

      Sub TRIM_CELLS()
      
          'Clean all conditional formating
          Cells.FormatConditions.Delete
      
          'improve performance
          Application.ScreenUpdating = False
      
          Dim all_cells_range As String
          all_cells_range = "A1:A2"
      
          'Trim all those cells
          Range(all_cells_range).Select
          For Each cell In Selection.Cells
              For I = 1 To 255
                  cell = WorksheetFunction.Substitute(cell, Chr(I), I)
              Next I
      
          Next cell
      End Sub
      

      【讨论】:

      • 如果您在即时窗口len(trim(cell)) 中输入此内容会得到什么?
      • “奇怪的字符/空格”被计算在内!
      • 试试这个。将该单元格中的字体转换为 webdings。键入 - 不复制/粘贴 - Maria Antonieta 在其下方,并将其转换为 webdings。流氓角色应该在最后可见。它是什么?
      • @Nick prntscr.com/pjl39z 也做了 =code(cellWithOnlyWeirdChar) 结果是 160...但是 char(160) 没有转换
      • 在我的回答中查看更新。它认为是chr(160)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多