Обрезать ведущие пробелы из ячеек Excel - PullRequest
1 голос
/ 18 октября 2011

Как мне избавиться от ведущих пробелов в ?

У меня довольно много строк с этой проблемой.

Ответы [ 3 ]

10 голосов
/ 19 октября 2011

В вашем запросе на удаление пробелов обратите внимание, что:

  • TRIM удаляет только символ 32, то есть стандартный пробел.
  • CLEAN удалит непечатаемые пробелы, такие как возврат каретки (символ 13) и перевод строки (символ 10)
  • CLEAN не имеет дело с неразрывными пробелами (символ 160), распространенная проблема при работе с данными из Интернета, для этого вам нужна SUBSTITUTE функция

Вы можете сделать это либо с помощью формул по всей ячейке, либо более безболезненно (и нацеливаясь на ведущий пробел) с помощью

  1. С формулой вы можете комбинировать эти три формулы, чтобы очистить целую клетку, как =TRIM(CLEAN(SUBSTITUTE(A1,CHAR(160)," "))). Смотрите рецензию Рона де Брюинса здесь

  2. Приведенный ниже VBA эффективно заменит ваши данные на месте, используя массивы и регулярные выражения, без необходимости использования каких-либо рабочих столбцов, а также копирования и вставки. Инструкции по применению включены в код ниже. Этот код работает только на ведущую часть строки, в отличие от параметров формулы

        Sub KillLeadingSpaces()
    
         'Press Alt + F11 to open the Visual Basic Editor (VBE)
         'From the Menu, choose Insert-Module.
         'Paste the code into the right-hand code window.
         'Press Alt + F11 to close the VBE
         'In Xl2003 Goto Tools ....Macro .... Macros and double-click KillLeadingSpaces
         'In Xl2007/10 Goto Developer .. Macros and double-click KillLeadingSpaces
    
        Dim rng1 As Range
        Dim rngArea As Range
        Dim lngRow As Long
        Dim lngCol As Long
        Dim lngCalc As Long
        Dim objReg As Object
        Dim X()  
    
        On Error Resume Next
        Set rng1 = Application.InputBox("Select range for the replacement of leading zeros", "User select", Selection.Address, , , , , 8)
        If rng1 Is Nothing Then Exit Sub
        On Error GoTo 0
    
        'See Patrick Matthews excellent article on using Regular Expressions with VBA
        Set objReg = CreateObject("vbscript.regexp")
        objReg.Pattern = "^[\s|\xA0]+"
    
        'Speed up the code by turning off screenupdating and setting calculation to manual
        'Disable any code events that may occur when writing to cells
        With Application
            lngCalc = .Calculation
            .ScreenUpdating = False
            .Calculation = xlCalculationManual
            .EnableEvents = False
        End With
    
        'Test each area in the user selected range
    
        'Non contiguous range areas are common when using SpecialCells to define specific cell types to work on
        For Each rngArea In rng1.Areas
            'The most common outcome is used for the True outcome to optimise code speed
            If rngArea.Cells.Count > 1 Then
               'If there is more than once cell then set the variant array to the dimensions of the range area
               'Using Value2 provides a useful speed improvement over Value. On my testing it was 2% on blank cells, up to 10% on non-blanks
                X = rngArea.Value2
                For lngRow = 1 To rngArea.Rows.Count
                    For lngCol = 1 To rngArea.Columns.Count
                        'replace the leading zeroes
                        X(lngRow, lngCol) = objReg.Replace(X(lngRow, lngCol), vbNullString)
                    Next lngCol
                Next lngRow
                'Dump the updated array sans leading whitepace back over the initial range
                rngArea.Value2 = X
            Else
                'caters for a single cell range area. No variant array required
                rngArea.Value = objReg.Replace(rngArea.Value, vbNullString)
            End If
        Next rngArea
    
        'cleanup the Application settings
        With Application
            .ScreenUpdating = True
            .Calculation = lngCalc
            .EnableEvents = True
        End With
    
        Set objReg = Nothing
        End Sub
    
5 голосов
/ 18 октября 2011

Предположим, вы хотите избавиться от пробелов в столбце A.

  1. Перейти к пустому столбцу (скажем, B)
  2. Введите =TRIM(A1) в B1.
  3. Заполните эту формулу вниз во все строки B.
  4. Затем скопируйте столбец B в буфер обмена и используйте «вставить содержимое», чтобы скопировать значения (не формулу) столбца B обратно в столбец A.
2 голосов
/ 18 октября 2011

Можете ли вы использовать встроенную функцию TRIM? Удаляет пробелы из начала и конца текста, переданного в него:

=TRIM(A1)

Эта формула даст вам текст из ячейки A1 без пробела в начале или в конце.

Чтобы использовать формулу, вы должны вставить столбец рядом с исходным столбцом. Затем введите формулу в первую (верхнюю) пустую ячейку, подставив вместо «A1» координаты ячейки первой (верхней) ячейки исходного столбца, затем нажмите клавишу ввода. Затем вы можете взять нижний правый угол ячейки (курсор изменится на символ «+») и перетащить поле вниз до последней ячейки в новом столбце, чтобы повторить формулу для всех строк в столбце.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...