Обрезка макроса Excel nbsp, пробелы, \ n не работают должным образом - PullRequest
1 голос
/ 15 октября 2019

Я пытаюсь разобрать левый и правый пробелы, nbsp, \ n, \ t и т. Д. Из всех ячеек Excel в определенном диапазоне. Я использую следующий макрос:

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

Проблема в том, что что-то вроде этого "Мария Таварес" не обрезается должным образом ... Есть идеи почему?

Ответы [ 3 ]

1 голос
/ 15 октября 2019

@ Ник: Я пытался использовать вашу идею, и я думаю, что проблема заключается в самом символе ... Предполагая, что следующий цикл работает, как и ожидалось, я бы получил символ, который вызывает проблему.

Посмотрите на это изображение:

Но в этом месте ничего не печатается.

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
1 голос
/ 15 октября 2019

Я использую функцию, которая удаляет любые специальные символы, которые вы определяете.

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) - символ табуляции и т. Д.

См. Эту ссылку , что означают другие Chr коды.

ОБНОВЛЕНИЕ:

Попробуйте удалить странного «шпионского» персонажа из ячейки.

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

0 голосов
/ 15 октября 2019

Закончил замену этим "пробелом" ... не очень хорошее решение, но исправил мою проблему ... Просто хотел бы знать, что это был за символ ...

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
...