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

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

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.

  1. Что делает макрос
  2. Код макроса
  3. Как работает макрос
  4. Как использовать
  5. Скачать файл

Ссылка на это место страницы:
#zadacha

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

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

Ссылка на это место страницы:
#formula

  1. Sub UdalitLishnieProbeli()
  2. Dim MyRange As Range
  3. Dim MyCell As Range
  4. Select Case MsgBox("Перед изменением ячеек. " & _
  5. "Сохранить книгу?", vbYesNoCancel)
  6. Case Is = vbYes
  7. ThisWorkbook.Save
  8. Case Is = vbCancel
  9. Exit Sub
  10. End Select
  11. Set MyRange = Selection
  12. For Each MyCell In MyRange
  13. If Not IsEmpty(MyCell) Then
  14. MyCell = Trim(MyCell)
  15. End If
  16. Next MyCell
  17. End Sub

Ссылка на это место страницы:
#kak

1. Шаг 1 объявляет две переменные объекта Range

2. При выполнении макрос уничтожает стек отката. Это означает, что вы не сможете отменить изменения, поэтому нужно сохранить книгу перед запуском макроса. Это делает Шаг 2.

3. Шаг 3 заполняет переменную MyRange с целевым диапазоном. 

4. Шаг 4 начинает цикл через каждую ячейку в целевом диапазоне. После того, как клетка активируется. 

5. Шаг 5 проверяет пуста ли ячейка с помощью функции IsEmpty, а потом с помощью функции Trim удаляет лишние пробелы 

6. Шаг 6 повторяет цикл, чтобы получить следующую ячейку. После просмотра всех ячеек в целевом диапазоне макрос заканчивается. 

Ссылка на это место страницы:
#touse

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

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

Ссылка на это место страницы:
#file

Файлы статей доступны только зарегистрированным пользователям.

1. Введите свою почту

2. Нажмите Зарегистрироваться

3. Обновите страницу
Вместо этого блока появится ссылка для скачивания материалов.

Привет! Меня зовут Дмитрий. С 2014 года Microsoft Cretified Trainer. Вместе с командой управляем этим сайтом. Наша цель — помочь вам эффективнее работать в Excel. 

Изучайте наши статьи с примерами формул, сводных таблиц, условного форматирования, диаграмм и макросов. Записывайтесь на наши курсы или заказывайте обучение в корпоративном формате.

Подписывайтесь на нас в соц.сетях:

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

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 макросы копирование данных ячеек