Excel макрос для удаления лишних пробелов

Удаление лишних пробелов из строк с помощью кода VBA Excel. Функции LTrim, RTrim, Trim. Встроенная функция рабочего листа и пользовательская функция. Пример.

  • LTrim(строка) — удаление пробелов слева;
  • RTrim(строка) — удаление пробелов справа;
  • Trim(строка) — удаление пробелов слева и справа.

Встроенная функция рабочего листа

Функция VBA Trim удаляет пробелы только по краям строки, не затрагивая двойные, тройные и т.д. пробелы внутри текста. Для удаления всех лишних пробелов следует использовать встроенную функцию Trim рабочего листа Excel.

Синтаксис функции Trim рабочего листа:

WorksheetFunction.Trim(строка)

Пользовательская функция

Можно бороться с лишними пробелами и с помощью пользовательской функции:

Function myTrim(text As String) As String

‘Удаляем пробелы слева и справа строки

  text = Trim(text)

‘Удаляем лишние пробелы внутри строки

    Do While InStr(text, »  «)

      text = Replace(text, »  «, » «)

    Loop

  myTrim = text

End Function

Пример удаления лишних пробелов

Сократим лишние пробелы в одной и той же строке с помощью функции Trim VBA, встроенной функции Trim рабочего листа Excel, пользовательской функции myTrim и сравним результаты.

Sub Primer()

Dim a1 As String

a1 = »  Жили   у     бабуси «

MsgBox Trim(a1) & vbCrLf _

& WorksheetFunction.Trim(a1) _

& vbCrLf & myTrim(a1)

End Sub

Чтобы код примера сработал без ошибок, код пользовательской функции myTrim должен быть добавлен в тот же модуль.

В этом уроке мы создадим макрос, который удалит лишние пробелы в нужном диапазоне. Макрос будет работать как функция Excel СЖПРОБЕЛЫ. Если вы хотите при помощи VBA сделать то, что делает функция СЖПРОБЕЛЫ, то вы попали по адресу.

Данные, в которых нужно удалять лишние пробелы находятся в диапазоне A2:A4:

Мы будем пользоваться функцией Application.Trim:

Sub triming()
    ' Переменная для диапазона
    Dim trim_range  As Range
    
    ' Присваиваем значение объектной переменной
    Set trim_range = Range("a2:a4")
    
    ' Выделяем диапазон
    trim_range.Select
    
    ' Удаляем лишние пробелы
    With Selection
        .Value = Application.Trim(.Value)
    End With

End Sub

В результате получим данные без лишних пробелов:

I’m trying to delete the spaces that I have in each field of the column «A» this spaces are at the end of the string some of the string has 3 spaces others 4. When I run the code, I don’t have error, so I think I have a bug because nothing happened when is running.

Dim result As String
Last = Cells(Rows.Count, "A").End(xlUp).Row
    For i = Last To 1 Step -1
      If (Right(Cells(i, "A").Value, 4)) Like "    " Or (Right(Cells(i, "A").Value, 3)) Like "   " Then
        result = Replace(Cells(i, "A"), " ", "")
    End If
Next i

halfer's user avatar

halfer

19.8k17 gold badges97 silver badges185 bronze badges

asked Aug 14, 2015 at 15:42

Alejandro Villalon's user avatar

In your specific case, the problem is that you’re storing the replacement value in a string variable named result, then doing nothing with it. If you want it to be in the Cell, you have to add it back in there, such as:

Cells(I, "A").Value = result

Keep in mind, there is an Application.Trim method that can actually save a bit of time over looping. Experiment with code such as:

Dim rng as Range

set rng = Range("A1:A10")
rng.Value = Application.Trim(rng)

answered Aug 14, 2015 at 15:44

basodre's user avatar

5

Currently you are not actually updating the cell in the loop, you just;

result = Replace(Cells(i, "A"), " ", "")

You should:

Cells(i, "A") = Replace(Cells(i, "A"), " ", "")

Or better

Cells(i, "A") = rtrim$(Cells(i, "A"))

Which will remove all right spaces. You can probably remove the if check as well.

answered Aug 14, 2015 at 15:45

Alex K.'s user avatar

Alex K.Alex K.

170k30 gold badges263 silver badges286 bronze badges

2

What are expecting this code to do? as currently the values are being read into result. It would also be better to use trim to remove trailing spaces.

Dim result As String
Last = Cells(Rows.Count, "A").End(xlUp).Row
    For i = Last To 1 Step -1
        result = RTrim(Cells(i, "A"))
    Next i

answered Aug 14, 2015 at 15:44

99moorem's user avatar

99moorem99moorem

1,9551 gold badge15 silver badges27 bronze badges

1

Skip to content

На чтение 2 мин. Просмотров 3.2k.

Что делает макрос: Частая проблема при импорте данных из других источников — это начальные или конечные пробелы. Данный макрос позволит легко удалить лишние пробелы в ячейках.

Содержание

  1. Как макрос работает
  2. Код макроса
  3. Как этот код работает
  4. Как использовать

Как макрос работает

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

Код макроса

Sub UdalitLishnieProbeli()
'Шаг 1: Объявляем переменные
Dim MyRange As Range
Dim MyCell As Range
'Шаг 2: Сохранить книгу прежде, чем изменить данные?
Select Case MsgBox("Перед изменением ячеек. " & _
"Сохранить книгу?", vbYesNoCancel)
Case Is = vbYes
ThisWorkbook.Save
Case Is = vbCancel
Exit Sub
End Select
'Шаг 3: определяем целевой диапазон
Set MyRange = Selection
'Шаг 4: запускаем цикл по диапазону
For Each MyCell In MyRange
'Шаг 5: Убираем пробелы
If Not IsEmpty(MyCell) Then
MyCell = Trim(MyCell)
End If
'Шаг 6: Получаем следующую ячейку в диапазоне
Next MyCell
End Sub

Как этот код работает

  1. Шаг 1 объявляет две переменные объекта Range.
  2. Мы должны сохранить книгу перед запуском макроса.
  3. Шаг 3 заполняет переменную MyRange с целевым диапазоном.
  4. После того, как клетка активируется, Шаг 5 использует Not IsEmpty функцию, которая удаляет лишние пробелы
  5. Шаг 6 повторяет цикл, чтобы получить следующую ячейку. После просмотра всех ячеек в целевом диапазоне макрос заканчивается.

Как использовать

Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:

  1. Активируйте редактор Visual Basic, нажав ALT + F11.
  2. Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
  3. Выберите Insert➜Module.

Удалить пробелы макросом

Mark1976

Дата: Воскресенье, 26.03.2017, 23:09 |
Сообщение № 1

Группа: Проверенные

Ранг: Ветеран

Сообщений: 682


Репутация:

3

±

Замечаний:
0% ±


Excel 2010, 2013

Здравствуйте. Столкнулся с проблемой. Работаю удаленно с 1С, и вот при копировании чисел, они вставляются с пробелами. Вот так: 709 074,17. Найти и заменить работает не корректно. Если ставить пробел клавишей пробел ничего не заменяется, приходится этот пробел копировать и потом заменять. Такими кривыми числами я заполнил большую таблицу, и теперь мне надо удалить эти пробелы. Может есть макрос который может это сделать: Удалить пробелы из выделенных ячеек.

Сообщение отредактировал Mark1976Воскресенье, 26.03.2017, 23:10

 

Ответить

HoBU4OK

Дата: Воскресенье, 26.03.2017, 23:23 |
Сообщение № 2

Группа: Проверенные

Ранг: Обитатель

Сообщений: 307


Репутация:

14

±

Замечаний:
0% ±


Excel 2010

Попробуйте написать макрос через рекордер… Вам его поправят и это не сложно (и вам опыт B) )
А ещё, возможно поможет, надстройка XLTools


Я думал, ты остроглазый лев, а ты слепая собака :-)

 

Ответить

Mark1976

Дата: Воскресенье, 26.03.2017, 23:26 |
Сообщение № 3

Группа: Проверенные

Ранг: Ветеран

Сообщений: 682


Репутация:

3

±

Замечаний:
0% ±


Excel 2010, 2013

HoBU4OK, [vba]

Код

Sub Макрос1()

‘ Макрос1 Макрос


    Range(«V32:Z35»).Select
    Selection.Replace What:=» «, Replacement:=»», LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
End Sub

[/vba]

Готово

Сообщение отредактировал Mark1976Воскресенье, 26.03.2017, 23:37

 

Ответить

HoBU4OK

Дата: Воскресенье, 26.03.2017, 23:32 |
Сообщение № 4

Группа: Проверенные

Ранг: Обитатель

Сообщений: 307


Репутация:

14

±

Замечаний:
0% ±


Excel 2010

Кнопочка другая для оформления) (вместоfx -#)
И как? Работает?


Я думал, ты остроглазый лев, а ты слепая собака :-)

Сообщение отредактировал HoBU4OKВоскресенье, 26.03.2017, 23:33

 

Ответить

Саня

Дата: Понедельник, 27.03.2017, 01:56 |
Сообщение № 5

Группа: Друзья

Ранг: Ветеран

Сообщений: 1067


Репутация:

560

±

Замечаний:
0% ±


XL 2016

вот так попробуйте:

[vba]

[/vba]

Сообщение отредактировал СаняПонедельник, 27.03.2017, 01:56

 

Ответить

_Boroda_

Дата: Понедельник, 27.03.2017, 03:57 |
Сообщение № 6

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

Первый макрос работает от ячейки V32 до последней заполненной ячейки столбца Z
Второй работает по выделенному диапазону (одну ячейку выделять нежелательно)
Меняет неразрывный пробел (как посоветовал выше Саня — действительно, из 1С он чаще всего и выгружается) и обычный. И потом преобразует полученное в числа
[vba]

Код

Sub tt()
    r0_ = 32
    r1_ = Range(«Z» & Rows.Count(3)).End(3).Row
    With Range(«V» & r0_ & «:Z» & r1_)
        .Replace What:=Chr(160), Replacement:=»»
        .Replace What:=Chr(32), Replacement:=»»
        .FormulaLocal = .FormulaLocal
    End With
End Sub
‘======================
Sub tt1()
    With Selection
        .Replace What:=Chr(160), Replacement:=»»
        .Replace What:=Chr(32), Replacement:=»»
        .FormulaLocal = .FormulaLocal
    End With
End Sub

[/vba]


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

Mark1976

Дата: Понедельник, 27.03.2017, 18:09 |
Сообщение № 7

Группа: Проверенные

Ранг: Ветеран

Сообщений: 682


Репутация:

3

±

Замечаний:
0% ±


Excel 2010, 2013

Boroda, спасибо. Макрос работает безупречно.

 

Ответить

Понравилась статья? Поделить с друзьями:
  • Excel макрос для удаления дубликатов
  • Excel макрос для удаления всех макросов в книге
  • Excel макрос для транслитерации
  • Excel макрос для сравнения таблица
  • Excel макрос для сортировки таблицы