Vba 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 должен быть добавлен в тот же модуль.

 

Andrey

Пользователь

Сообщений: 41
Регистрация: 01.01.1970

как на VBA будет выглядить функция СЖПРОБЕЛЫ() ?

 

Haken

Пользователь

Сообщений: 495
Регистрация: 09.01.2013

Trim()  
причем и как функция листа, а так же есть и функция VBA, если надо в коде переменную «сжать»

 

аналог функции СЖПРОБЕЛЫ в VBA — не TRIM(» текст   текст  «), а  
application.WorksheetFunction.Trim(» текст   текст  «)  

  Последнюю можно также записать как  
WorksheetFunction.Trim(» текст   текст  «)  
и  
application.Trim(» текст   текст  «)  

    TRIM убирает пробелы только справа и слева,  
application.Trim уберет также повторяющиеся проблы внутри текста.

 

Andrey

Пользователь

Сообщений: 41
Регистрация: 01.01.1970

Но не получается почемуто..  
ячейка водержит «cxczxczxc zczxcz          zxczxczxc           zczxc»  
вот кусок кода :  

  cell = Trim(cell)  

  но ничего не происходит….

 

Hugo

Пользователь

Сообщений: 23251
Регистрация: 22.12.2012

Добавлю — Trim() уберёт только пробелы в начале и в конце, а двойные внутри оставит. А вот в VBA Excel при Application.WorksheetFunction.Trim(Ячейка.Value) —  будут удаляться лидирующие и финиширующие пробелы, а также многократные пробелы между словами (исползуется стандартная функция СЖПРОБЕЛЫ)

 

Hugo

Пользователь

Сообщений: 23251
Регистрация: 22.12.2012

{quote}{login=Andrey}{date=03.04.2010 07:17}{thema=}{post}Но не получается почемуто..  
ячейка водержит «cxczxczxc zczxcz          zxczxczxc           zczxc»  
вот кусок кода :  

  cell = Trim(cell)  

  но ничего не происходит….{/post}{/quote}  

  Так трим убирает только в начале и в конце — а там пробелов нет.  
cell = Application.WorksheetFunction.Trim(cell) используйте.

 

Hugo

Пользователь

Сообщений: 23251
Регистрация: 22.12.2012

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

 

Andrey

Пользователь

Сообщений: 41
Регистрация: 01.01.1970

Объесняю немного подробнее,что хочется получить..  
Есть диапазон ячеек,  в котором есть ячейки с содержанием «лишних»  пробелов.  
Вот нужен макрос, который бы «убивал» лишние пробелы ( по подобию результата действия функции Excel = СЖПРОБЕЛЫ() )  

  До макроса было :  
«Вася__Петя____Коля»  
После макроса :  
«Вася_Петя_Коля»  

  «_» — это пробелы (т.к. двойные пробелы движек форума «съедает»)

 

Афтар, выдели диапазон ячеек на листе и запусти этот код  

  Sub DelSpaces()  
Dim iCell As Range  
   If MsgBox(«Удалить лишние пробелы в выделенном диапазоне?», vbQuestion + vbYesNo, «Чистка пробелов») = vbNo Then Exit Sub  
   For Each iCell In Selection.Cells  
       iCell = Application.Trim(iCell)  
   Next  
   MsgBox «Лишние пробелы в указанном диапазоне удалены!», 64, «Конец»  
End Sub  

  и не мучай людей по пустякам )))

 

{quote}{login=}{date=03.04.2010 10:59}{thema=}{post}Афтар, выдели диапазон ячеек на листе и запусти этот код  

  Sub DelSpaces()  
Dim iCell As Range  
   If MsgBox(«Удалить лишние пробелы в выделенном диапазоне?», vbQuestion + vbYesNo, «Чистка пробелов») = vbNo Then Exit Sub  
   For Each iCell In Selection.Cells  
       iCell = Application.Trim(iCell)  
   Next  
   MsgBox «Лишние пробелы в указанном диапазоне удалены!», 64, «Конец»  
End Sub  

  и не мучай людей по пустякам ))){/post}{/quote}  
Вот так все же поэффективнее будет :-)  

  Sub test()  
   With Selection  
       .Value = Application.Trim(.Value)  
   End With  
End Sub

 

)) Кирилл как всегда на высоте ) Спасибо, буду знать )

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

KL, Ваше появление на форуме — подарок к празднику? Рад видеть (слышать? читать?) :)

 

{quote}{login=vikttur}{date=04.04.2010 01:24}{thema=}{post}KL, Ваше появление на форуме — подарок к празднику? Рад видеть (слышать? читать?) :){/post}{/quote}  
vikttur,  
Спасибо на добром слове. Я периодически почитываю форум, но времени отвечать почти нет. Да и потом в моем понимании здесь нет недостатка в квалифицированных ответах :-)

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

{quote}{login=KL}{date=04.04.2010 04:36}{thema=Re: }{post}{quote}{login=}{date=03.04.2010 10:59}{thema=}{post}Афтар, выдели диапазон ячеек на листе и запусти этот код  

  Sub DelSpaces()  
Dim iCell As Range  
   If MsgBox(«Удалить лишние пробелы в выделенном диапазоне?», vbQuestion + vbYesNo, «Чистка пробелов») = vbNo Then Exit Sub  
   For Each iCell In Selection.Cells  
       iCell = Application.Trim(iCell)  
   Next  
   MsgBox «Лишние пробелы в указанном диапазоне удалены!», 64, «Конец»  
End Sub  

  и не мучай людей по пустякам ))){/post}{/quote}  
Вот так все же поэффективнее будет :-)  

  Sub test()  
   With Selection  
       .Value = Application.Trim(.Value)  
   End With  
End Sub{/post}{/quote}  
Улет! Я бы не додумался.:-(

Я сам — дурнее всякого примера! …

 

Alex_ST

Пользователь

Сообщений: 2746
Регистрация: 22.12.2012

На лицо ужасный, добрый внутри

А у меня что-то так работать не хочет…  
Давно написанный для себя макрос:  
Sub Trim_with_Cycle()   ‘ применить функцию СЖПРОБЕЛЫ к ячейкам выделенного диапазона  
  Dim rRange As Range, rCell As Range  
  Application.ScreenUpdating = False  

    Set rRange = Intersect(Selection, ActiveSheet.UsedRange)  
  For Each rCell In rRange  
     rCell.Value = Application.WorksheetFunction.Trim(rCell.Value)  
  Next  

    Application.ScreenUpdating = True  
End Sub  

  работает отлично, а точно такой же, но по методу, предложенному KL (все ячейки диапазона сразу, а не циклом):  

  Sub Trim_with_Range()   ‘ применить функцию СЖПРОБЕЛЫ к ячейкам выделенного диапазона  
  Dim rRange As Range  
  Application.ScreenUpdating = False  

    Set rRange = Intersect(Selection, ActiveSheet.UsedRange)  
  rRange.Value = Application.WorksheetFunction.Trim(rRange.Value)  

    Application.ScreenUpdating = True  
End Sub  

  работать не хочет. Говорит, что «Несоответствие типа» (ошибка 13)

С уважением, Алексей (ИМХО: Excel-2003 — THE BEST!!!)
<#0>

 

Alex_ST

Пользователь

Сообщений: 2746
Регистрация: 22.12.2012

На лицо ужасный, добрый внутри

Я так сразу и пробовал.    
Если убрать .WorksheetFunction и написать просто:  
rRange.Value = Application.Trim(rRange.Value)  
то выдаётся «Ошибка, определяемая приложением или объектом» (ошибка 1004)

С уважением, Алексей (ИМХО: Excel-2003 — THE BEST!!!)
<#0>

 

Dophin

Пользователь

Сообщений: 2684
Регистрация: 01.01.1970

Sub Trim_with_Range() ‘ применить функцию СЖПРОБЕЛЫ к ячейкам выделенного диапазона  
Dim rRange As Range  
Set rRange = Intersect(Selection, ActiveSheet.UsedRange)  
rRange.Value = Application.Trim(rRange.Value)  
End Sub  

  так у меня работает, с функцией листа не работает.

 

Alex_ST

Пользователь

Сообщений: 2746
Регистрация: 22.12.2012

На лицо ужасный, добрый внутри

Подрихтовываю свой макрос, удаляющий лишние пробелы в ячейках.  
Чтобы не портились формулы и форматы даты/времени решил всё-таки отказаться от обработки целиком диапазона:  
rRange.Value = Application.Trim(rRange.Value),  
а ввести проверку каждой ячейки: не формула ли в ней, не дата ли, не время ли?  

  С формулой и датой всё ясно:  

  Sub Trim_By_Formula() ‘ применить функцию СЖПРОБЕЛЫ к ячейкам выделенного диапазона  
  Dim rRange As Range, rCell As Range  
  Application.ScreenUpdating = False  
  Set rRange = Intersect(Selection, ActiveSheet.UsedRange)  
  For Each rCell In rRange  
     If rCell.EntireRow.Height > 0 _  
        And Not (rCell.HasFormula) _  
        And Not IsDate(rCell) Then  
        rCell.Value = Application.WorksheetFunction.Trim(rCell.Value)  
     End If  
  Next  
  Application.ScreenUpdating = True  
End Sub  

  А вот как проверить не время ли в ячеёке?  
Свойство IsDate(rCell) вернёт ИСТИНУ при любом из форматов даты в ячейке.  
А как быть с разными форматами времени? Ведь аналогичного свойства IsTime(rCell) — в VBA нет…

С уважением, Алексей (ИМХО: Excel-2003 — THE BEST!!!)
<#0>

 

Юрий М

Модератор

Сообщений: 60575
Регистрация: 14.09.2012

Контакты см. в профиле

Но ведь время — это дата.

 

Alex_ST

Пользователь

Сообщений: 2746
Регистрация: 22.12.2012

На лицо ужасный, добрый внутри

Это Вы так думаете, а Ёксель — нет.  
Попробуйте ввести в одну ячейку, например, 1.1.10 (автоматически преобразуется после ввода в дату 01.01.2010), а в другую — 10:00 (преобразуется после ввода во время 10:00:00).  
А потом попробуйте применить к ячейкам мой макрос из предыдущего поста.  
Или просто напишите  
Private Sub Worksheet_SelectionChange(ByVal Target As Range)  
MsgBox IsDate(Target)  
End Sub  
«Покликайте» по ячейкам и сами увидите, что IsDate будет True только при дате в ячейке, а при времени — False

С уважением, Алексей (ИМХО: Excel-2003 — THE BEST!!!)
<#0>

 

Юрий М

Модератор

Сообщений: 60575
Регистрация: 14.09.2012

Контакты см. в профиле

А вот так корректно будет?  
Sub TestTimeFormat()  
Dim x As String  
x = ActiveCell.NumberFormat  
If x Like «*» & «:» & «*» Then MsgBox «Время»  
End Sub

 

Юрий М

Модератор

Сообщений: 60575
Регистрация: 14.09.2012

Контакты см. в профиле

Нет: если в ячейке формат дата + время, то тоже сработает. Тогда так:  
Sub TestTimeFormat()  
Dim x As String  
x = ActiveCell.NumberFormat  
If Len(x) < 9 And x Like «*» & «:» & «*» Then MsgBox «Только время»  
End Sub

 

Alex_ST

Пользователь

Сообщений: 2746
Регистрация: 22.12.2012

На лицо ужасный, добрый внутри

#23

12.05.2010 13:15:43

Мужики, а что быстрее будет работать в цикле:  
If Target.NumberFormat Like «*» & «:» & «*» Then …  
или  
If InStr(1, Target.NumberFormat, «h:mm», vbTextCompare) > 0 Then …

С уважением, Алексей (ИМХО: Excel-2003 — THE BEST!!!)
<#0>

Содержание

  1. Метод WorksheetFunction.Trim (Excel)
  2. Синтаксис
  3. Параметры
  4. Возвращаемое значение
  5. Замечания
  6. Поддержка и обратная связь
  7. How to remove spaces in between text?
  8. 10 Answers 10
  9. VBA Trim, LTrim, and RTrim Functions – Remove Spaces From Text
  10. Trim Function
  11. Trim Spaces Before and After Text
  12. Trim Multiple Spaces Before and After Text
  13. VBA Trim will NOT Remove Multiple Spaces Between Words
  14. Trim as a Worksheet Function
  15. Use Worksheet Trim Function in VBA
  16. VBA Coding Made Easy
  17. Difference Between WorksheetFunction.Trim and VBA Trim
  18. Use VBA to add Trim Function in a Range
  19. LTrim Function
  20. RTrim Function
  21. Remove all spaces from text
  22. VBA Code Examples Add-in
  23. Vba excel сжать пробелы
  24. VBA Excel. Работа с текстом (функции)
  25. Функции для работы с текстом
  26. Ключевые слова для работы с текстом
  27. Примеры
  28. Вывод прямых парных кавычек

Метод WorksheetFunction.Trim (Excel)

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

Синтаксис

expression. Обрезка (Arg1)

Выражение Переменная, представляющая объект WorksheetFunction .

Параметры

Имя Обязательный или необязательный Тип данных Описание
Arg1 Обязательный String Text — текст, из которого нужно удалить пробелы.

Возвращаемое значение

String

Замечания

Функция TRIM в Excel предназначена для обрезки 7-битового символа пространства ASCII (значение 32) от текста. В наборе символов Юникода есть дополнительный символ пробела, который называется неразрывным пробелом, который имеет десятичное значение 160. Этот символ обычно используется на веб-страницах в качестве сущности HTML, . Сама по себе функция Trim и метод WorksheetFunction.Trim не удаляют этот неразрывный пробел.

Метод WorksheetFunction.Trim в Excel отличается от функции Trim в VBA, которая удаляет только начальные и конечные пробелы.

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

How to remove spaces in between text?

Why trim is not working in VBA?

It is unable to remove the spaces in between the text.

I need to remove the extra spaces so I found Trim to do it but it is not working while ltrim and rtrim are.

10 Answers 10

Excel Trim will remove all spaces except a single space between words. VBA Trim will remove leading and trailing spaces.

Thank MS for using the same keyword for different functions.

Trim removes extra spaces at start and end, not in the middle of a string.

PS. It’s not the most efficient way to remove spaces. I wouldn’t use on many, very long strings or in a tight loop. It might be suitable for your situation.

I know this question is old but I just found it and thought I’d add what I use to remove multiple spaces in VBA.

When you call Trim() VBA is actually calling Strings.Trim(). This function will only remove leading and trailing spaces. To remove excessive spaces within a string, use

Are all your other functions leaving whitespace behind?

CleanUltra removes all whitespace and non-printable characters including whitespace left behind by other functions!

I hope you find this useful. Any improvements are welcome!

Here’s an example of it’s usage:

Here’s a test I ran to verify that the function actually removed all whitespace. vbNullChar was particularly devious. I had to set the function to remove it first, before the CLEAN and TRIM functions were used to stop them from removing all characters after the vbNullChar .

My related issue was that the last character was a chr(160) — a non-breaking space. So trim(replace(Str,chr(160),»»)) was the solution.

I know this question is old but I just want to share my solution on how to deal and fix with this issue.

Maybe you might wondering why sometimes TRIM function isn’t working, remember that it will only remove spaces and spaces are equivalent to ASCII 32. So if these ASCII 13 or ASCII 10 exists in the Beginning or end of your string value then TRIM function will not work on it.

With this code it works for me, by the way if this might not work on your side then try to check the ASCII of you string value because it might have another invisible special char that might not covered on my code to replace on it, kindly add on it to work.
Please see reference for some invisible special char.

Источник

VBA Trim, LTrim, and RTrim Functions – Remove Spaces From Text

In this Article

This tutorial will demonstrate how to use the Trim, LTrim, and RTrim VBA functions as well as the Trim worksheet function.

Trim Function

The VBA Trim function removes (“trims”) erroneous spaces before and after strings of text.

Trim Spaces Before and After Text

The VBA Trim function will remove spaces before and after strings of text:

Trim Multiple Spaces Before and After Text

This includes trimming multiple spaces before and after text:

VBA Trim will NOT Remove Multiple Spaces Between Words

However, the Trim function will not remove multiple spaces in between words:

Trim as a Worksheet Function

However, the Excel Trim worksheet function can be used to remove extra spaces between words:

Use Worksheet Trim Function in VBA

To use the Excel Trim Function in VBA, call it by using WorksheetFunction:

VBA Coding Made Easy

Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!

Difference Between WorksheetFunction.Trim and VBA Trim

This will demonstrate the differences between Trim and WorksheetFunction.Trim:

Use VBA to add Trim Function in a Range

The Trim Worksheet function can be added in a Range using property .Formula:

LTrim Function

The LTrim function removes spaces only from the left side of the word:

RTrim Function

The RTrim function removes spaces only from the right side of the word:

Trim, Ltrim and Rtrim do not remove spaces between words.

Remove all spaces from text

Trim will only remove extra spaces in between words, but to remove all spaces in a string of text, you can use the Replace Function:

VBA Code Examples Add-in

Easily access all of the code examples found on our site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

Источник

Vba excel сжать пробелы

= Мир MS Excel/MS Word: «СЖАТЬ_ПРОБЕЛЫ» — Мир MS Excel

Войти через uID

Войти через uID

Модератор форума: _Boroda_, китин

Мир MS Excel » Вопросы и решения » Excel и другие приложения » Word » MS Word: «СЖАТЬ_ПРОБЕЛЫ» (Аналог функции листа MS Excel «СЖАТЬПРОБЕЛЫ»)

MS Word: «СЖАТЬ_ПРОБЕЛЫ»

Alex_ST Дата: Вторник, 20.12.2011, 14:48 | Сообщение № 1


С уважением,
Алексей
MS Excel 2003 — the best.

808 Дата: Пятница, 03.02.2012, 10:42 | Сообщение № 2

Да, отличный макрос, но когда у меня еще небыло ни интернета ни минимальных познаний в VBA я пользовался простым, довольно эффективным хотя и не таким удобным способом.

Crtl + F > Вкладка «Заменить» > В строке «Найти» ставил два пробела, в строке «Заменить на» один пробел и кликал по кнопке «Заменить все» столько раз, сколько требовалось чтобы убрать все множественные пробелы.

Да, отличный макрос, но когда у меня еще небыло ни интернета ни минимальных познаний в VBA я пользовался простым, довольно эффективным хотя и не таким удобным способом.

Crtl + F > Вкладка «Заменить» > В строке «Найти» ставил два пробела, в строке «Заменить на» один пробел и кликал по кнопке «Заменить все» столько раз, сколько требовалось чтобы убрать все множественные пробелы. 808

Сообщение Да, отличный макрос, но когда у меня еще небыло ни интернета ни минимальных познаний в VBA я пользовался простым, довольно эффективным хотя и не таким удобным способом.

Crtl + F > Вкладка «Заменить» > В строке «Найти» ставил два пробела, в строке «Заменить на» один пробел и кликал по кнопке «Заменить все» столько раз, сколько требовалось чтобы убрать все множественные пробелы. Автор — 808
Дата добавления — 03.02.2012 в 10:42

Источник

VBA Excel. Работа с текстом (функции)

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

Функции для работы с текстом

Основные функции для работы с текстом в VBA Excel:

Функция Описание
Asc(строка) Возвращает числовой код символа, соответствующий первому символу строки. Например: MsgBox Asc(«/Stop»). Ответ: 47, что соответствует символу «/».
Chr(код символа) Возвращает строковый символ по указанному коду. Например: MsgBox Chr(47). Ответ: «/».
Format(Expression, [FormatExpression], [FirstDayOfWeek], [FirstWeekOfYear]) Преобразует число, дату, время в строку (тип данных Variant (String)), отформатированную в соответствии с инструкциями, включенными в выражение формата. Подробнее…
InStr([начало], строка1, строка2, [сравнение]) Возвращает порядковый номер символа, соответствующий первому вхождению одной строки (строка2) в другую (строка1) с начала строки. Подробнее…
InstrRev(строка1, строка2, [начало, [сравнение]]) Возвращает порядковый номер символа, соответствующий первому вхождению одной строки (строка2) в другую (строка1) с конца строки. Подробнее…
Join(SourceArray,[Delimiter]) Возвращает строку, созданную путем объединения нескольких подстрок из массива. Подробнее…
LCase(строка) Преобразует буквенные символы строки в нижний регистр.
Left(строка, длина) Возвращает левую часть строки с заданным количеством символов. Подробнее…
Len(строка) Возвращает число символов, содержащихся в строке.
LTrim(строка) Возвращает строку без начальных пробелов (слева). Подробнее…
Mid(строка, начало, [длина]) Возвращает часть строки с заданным количеством символов, начиная с указанного символа (по номеру). Подробнее…
Replace(expression, find, replace, [start], [count], [compare]) Возвращает строку, полученную в результате замены одной подстроки в исходном строковом выражении другой подстрокой указанное количество раз. Подробнее…
Right(строка, длина) Возвращает правую часть строки с заданным количеством символов. Подробнее…
RTrim(строка) Возвращает строку без конечных пробелов (справа). Подробнее…
Space(число) Возвращает строку, состоящую из указанного числа пробелов. Подробнее…
Split(Expression,[Delimiter],[Limit],[Compare]) Возвращает одномерный массив подстрок, извлеченных из указанной строки с разделителями. Подробнее…
StrComp(строка1, строка2, [сравнение]) Возвращает числовое значение Variant (Integer), показывающее результат сравнения двух строк. Подробнее…
StrConv(string, conversion) Изменяет регистр символов исходной строки в соответствии с заданным параметром «conversion». Подробнее…
String(число, символ) Возвращает строку, состоящую из указанного числа символов. В выражении «символ» может быть указан кодом символа или строкой, первый символ которой будет использован в качестве параметра «символ». Подробнее…
StrReverse(строка) Возвращает строку с обратным порядком следования знаков по сравнению с исходной строкой. Подробнее…
Trim(строка) Возвращает строку без начальных (слева) и конечных (справа) пробелов. Подробнее…
UCase(строка) Преобразует буквенные символы строки в верхний регистр.
Val(строка) Возвращает символы, распознанные как цифры с начала строки и до первого нецифрового символа, в виде числового значения соответствующего типа. Подробнее…
WorksheetFunction.Trim(строка) Функция рабочего листа, которая удаляет все лишние пробелы (начальные, конечные и внутренние), оставляя внутри строки одиночные пробелы.

В таблице перечислены основные функции VBA Excel для работы с текстом. С полным списком всевозможных функций вы можете ознакомиться на сайте разработчика.

Ключевые слова для работы с текстом

Ключевое слово Описание
& Оператор & объединяет два выражения (результат = выражение1 & выражение2). Если выражение не является строкой, оно преобразуется в Variant (String), и результат возвращает значение Variant (String). Если оба выражения возвращают строку, результат возвращает значение String.
vbCrLf Константа vbCrLf сочетает в себе возврат каретки и перевод строки (Chr(13) + Chr(10)) и переносит последующий текст на новую строку (результат = строка1 & vbCrLf & строка2).
vbNewLine Константа vbNewLine в VBA Excel аналогична константе vbCrLf, также сочетает в себе возврат каретки и перевод строки (Chr(13) + Chr(10)) и переносит текст на новую строку (результат = строка1 & vbNewLine & строка2).

Примеры

Вывод прямых парных кавычек

Прямые парные кавычки в VBA Excel являются спецсимволами и вывести их, заключив в самих себя или в одинарные кавычки (апострофы), невозможно. Для этого подойдет функция Chr:

Источник

Читайте также:  Как настроить герцовку монитора asus

Adblock
detector

In this Article

  • Trim Function
    • Trim Spaces Before and After Text
    • Trim Multiple Spaces Before and After Text
    • VBA Trim will NOT Remove Multiple Spaces Between Words
    • Trim as a Worksheet Function
    • Use Worksheet Trim Function in VBA
    • Difference Between WorksheetFunction.Trim and VBA Trim
    • Use VBA to add Trim Function in a Range
    • LTrim Function
    • RTrim Function
    • Remove all spaces from text

This tutorial will demonstrate how to use the Trim, LTrim, and RTrim VBA functions as well as the Trim worksheet function.

Trim Function

The VBA Trim function removes (“trims”) erroneous spaces before and after strings of text.

Trim Spaces Before and After Text

The VBA Trim function will remove spaces before and after strings of text:

Sub TrimExample_1()
MsgBox Trim(" I love excel ")		
'Result is: "I love excel"

MsgBox Trim(" I love excel")		
'Result is: "I love excel"

MsgBox Trim("I love excel ")		
'Result is: "I love excel"
End Sub

Trim Multiple Spaces Before and After Text

This includes trimming multiple spaces before and after text:

Sub TrimExample_2()
MsgBox Trim("     I love excel          ")		
'Result is: "I love excel"

MsgBox Trim("      I love excel")			
'Result is: "I love excel"

MsgBox Trim("I love excel             ")		
'Result is: "I love excel"
End Sub

VBA Trim will NOT Remove Multiple Spaces Between Words

However, the Trim function will not remove multiple spaces in between words:

Sub TrimExample_3()
MsgBox Trim("     I love    excel          ")		
'Result is: "I love    excel"

MsgBox Trim("      I  love excel")			
'Result is: "I  love excel"

MsgBox Trim("I love        excel             ")		
'Result is: "I love        excel"
End Sub

Trim as a Worksheet Function

However, the Excel Trim worksheet function can be used to remove extra spaces between words:

trim worksheet remove extra spaces

Use Worksheet Trim Function in VBA

To use the Excel Trim Function in VBA, call it by using WorksheetFunction:

Sub TrimExample_4()
Msgbox WorksheetFunction.Trim("     I love    excel          ")	
'Result is: "I love excel"

Msgbox WorksheetFunction.Trim("      I  love excel")		
'Result is: "I love excel"

Msgbox WorksheetFunction.Trim("I love        excel             ")	
'Result is: "I love excel"
End Sub

VBA Coding Made Easy

Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!

automacro

Learn More

Difference Between WorksheetFunction.Trim and VBA Trim

This will demonstrate the differences between Trim and WorksheetFunction.Trim:

Sub TrimExample_5()
Msgbox WorksheetFunction.Trim("     I love    excel          ")	
'Result is: "I love excel"
Msgbox Trim("     I love    excel          ")				
'Result is: "I love    excel"

Msgbox WorksheetFunction.Trim("      I  love excel")		
'Result is: "I love excel"
Msgbox Trim("      I  love excel")					
'Result is: "I  love excel"

Msgbox WorksheetFunction.Trim("I love        excel             ")	
'Result is: "I love excel"
Msgbox Trim("I love        excel             ")				
'Result is: "I love        excel"

End Sub

Use VBA to add Trim Function in a Range

The Trim Worksheet function can be added in a Range using property .Formula:

Sub TrimExample_6()
ThisWorkbook.Worksheets("Sheet1").Range("B1").Formula = "=trim(A1)"		
End Sub

LTrim Function

The LTrim function removes spaces only from the left side of the word:

Sub TrimExample_7()
MsgBox LTrim(" I love excel ")			
'Result is: "I love excel "

MsgBox LTrim(" I love excel")			
'Result is: "I love excel"

MsgBox LTrim("I love excel ")			
'Result is: "I love excel "

MsgBox LTrim("   I love   excel   ")		
'Result is: "I love   excel   "

MsgBox LTrim("   I   love excel")			
'Result is: "I   love excel"

MsgBox LTrim("I love    excel   ")			
'Result is: "I love    excel    "
End Sub

VBA Programming | Code Generator does work for you!

RTrim Function

The RTrim function removes spaces only from the right side of the word:

Sub TrimExample_8()
MsgBox RTrim(" I love excel ")			
'Result is: " I love excel"

MsgBox RTrim(" I love excel")			
'Result is: " I love excel"

MsgBox RTrim("I love excel ")			
'Result is: "I love excel"

MsgBox RTrim("   I love   excel   ")		
'Result is: "   I love   excel"

MsgBox RTrim("    I    love excel")		
'Result is: "    I    love excel"

MsgBox RTrim("I    love excel    ")		
'Result is: "I     love excel    "
End Sub

Trim, Ltrim and Rtrim do not remove spaces between words.

Remove all spaces from text

Trim will only remove extra spaces in between words, but to remove all spaces in a string of text, you can use the Replace Function:

Sub ReplaceExample ()
MsgBox Replace("     I love     excel ", " ", "")		
'Result is: "Iloveexcel"
End Sub

Are all your other functions leaving whitespace behind?

Get CleanUltra!

CleanUltra removes all whitespace and non-printable characters including whitespace left behind by other functions!

I hope you find this useful. Any improvements are welcome!

Function CleanUltra( _
       ByVal stringToClean As String, _
       Optional ByVal removeSpacesBetweenWords As Boolean = False) _
        As String
' Removes non-printable characters and whitespace from a string


' Remove the 1 character vbNullChar. This must be done first
'  if the string contains vbNullChar
    stringToClean = Replace(stringToClean, vbNullChar, vbNullString)

    ' Remove non-printable characters.
    stringToClean = Application.Clean(stringToClean)

    ' Remove all spaces except single spaces between words
    stringToClean = Application.Trim(stringToClean)

    If removeSpacesBetweenWords = True Then _
       stringToClean = Replace(stringToClean, " ", vbNullString)

    CleanUltra = stringToClean
End Function

Here’s an example of it’s usage:

Sub Example()
    Dim myVar As String
    myVar = " abc d e  "

    MsgBox CleanUltra(myVar)
End Sub

Here’s a test I ran to verify that the function actually removed all whitespace. vbNullChar was particularly devious. I had to set the function to remove it first, before the CLEAN and TRIM functions were used to stop them from removing all characters after the vbNullChar.

Sub Example()
    Dim whitespaceSample As String
    Dim myVar As String

' Examples of various types of whitespace
'  (vbNullChar is particularly devious!)
    whitespaceSample = vbNewLine & _
                       vbCrLf & _
                       vbVerticalTab & _
                       vbFormFeed & _
                       vbCr & _
                       vbLf & _
                       vbNullChar

    myVar = "     1234" & _
            whitespaceSample & _
            "     56      " & _
            "789     "

    Debug.Print "ORIGINAL"
    Debug.Print myVar
    Debug.Print "Character Count: " & Len(myVar)


    Debug.Print
    Debug.Print "CLEANED, Option FALSE"


    Debug.Print CleanUltra(myVar)
    Debug.Print CleanUltra(myVar, False)
    '   Both of these perform the same action.  If the optional parameter to
    '   remove spaces between words is left blank it defaults to FALSE.
    '   Whitespace is removed but spaces between words are preserved.
    Debug.Print "Character Count: " & Len(CleanUltra(myVar))


    Debug.Print
    Debug.Print "CLEANED, Option TRUE"

    Debug.Print CleanUltra(myVar, True)
    '   Optional parameter to remove spaces between words is set to TRUE.
    '   Whitespace and all spaces between words are removed.
    Debug.Print "Character Count: " & Len(CleanUltra(myVar, True))

End Sub

Понравилась статья? Поделить с друзьями:
  • Vba excel сгруппировать строки
  • Vba excel свойство ячейки
  • Vba excel свойство tag
  • Vba excel свойство cells
  • Vba excel режим конструктора