Страницы: 1
RSS
сжатие пробелов в VBA
 
подскажите, пожалуйста, код, который будет убирать лишние пробелы во всех ячейках листа. Вот, например, в excel есть функция "сжпробелы", но она оставляет по одному пробелу между словами и убирает пробелы перед первой и последней буквами. А мне надо, чтобы это делалось в VBA, при вызове макроса. Вставлять лишние столбцы в excel мне нельзя, т.к. поедут все формулы. Хотелось бы, чтобы при запуске макроса, данные просто заменялись темиже, только без лишних пробелов.  
Напишите, пожалуйста, код для столбца А.
 
{quote}{login=света}{date=23.03.2008 07:52}{thema=сжатие пробелов в VBA}{post}подскажите, пожалуйста, код, который будет убирать лишние пробелы во всех ячейках листа. Вот, например, в excel есть функция "сжпробелы", но она оставляет по одному пробелу между словами и убирает пробелы перед первой и последней буквами. А мне надо, чтобы это делалось в VBA, при вызове макроса. Вставлять лишние столбцы в excel мне нельзя, т.к. поедут все формулы. Хотелось бы, чтобы при запуске макроса, данные просто заменялись темиже, только без лишних пробелов.  
Напишите, пожалуйста, код для столбца А.{/post}{/quote}  
 
 
можно записать макрос.  
 
Range("B1").Select  
   ActiveCell.FormulaR1C1 = "=TRIM(RC[-1])"
   Range("B1").Select  
   Selection.AutoFill Destination:=Range("B1:B13"), Type:=xlFillDefault  
   Range("B1:B13").Select
 
{quote}{login=света}{date=23.03.2008 07:52}{thema=сжатие пробелов в VBA}{post}подскажите, пожалуйста, код, который будет убирать лишние пробелы во всех ячейках листа. Вот, например, в excel есть функция "сжпробелы", но она оставляет по одному пробелу между словами и убирает пробелы перед первой и последней буквами. А мне надо, чтобы это делалось в VBA, при вызове макроса. Вставлять лишние столбцы в excel мне нельзя, т.к. поедут все формулы. Хотелось бы, чтобы при запуске макроса, данные просто заменялись темиже, только без лишних пробелов.  
Напишите, пожалуйста, код для столбца А.{/post}{/quote}  
 
вы бы все же определились - какие пробелы лишние, а какие нет..  
 
а так есть ф-ия replace - может удалить все пробелы, может только "лишние", смотря как использовать
 
{quote}{login=слэн}{date=23.03.2008 09:12}{thema=Re: сжатие пробелов в VBA}{post}{quote}{login=света}{date=23.03.2008 07:52}{thema=сжатие пробелов в VBA}{post}подскажите, пожалуйста, код, который будет убирать лишние пробелы во всех ячейках листа. Вот, например, в excel есть функция "сжпробелы", но она оставляет по одному пробелу между словами и убирает пробелы перед первой и последней буквами. А мне надо, чтобы это делалось в VBA, при вызове макроса. Вставлять лишние столбцы в excel мне нельзя, т.к. поедут все формулы. Хотелось бы, чтобы при запуске макроса, данные просто заменялись темиже, только без лишних пробелов.  
Напишите, пожалуйста, код для столбца А.{/post}{/quote}  
 
вы бы все же определились - какие пробелы лишние, а какие нет..  
 
а так есть ф-ия replace - может удалить все пробелы, может только "лишние", смотря как использовать{/post}{/quote}  
 
 
лишние - это в начале слова, в конце слова и между словами когда более одного пробела
 
слэн, помогите, пожалуйста, написать макрос.
 
Кто-нибудь помогите!
 
{quote}{login=}{date=23.03.2008 10:49}{thema=}{post}Кто-нибудь помогите!{/post}{/quote}  
---  
Света, вот такой макрос поможет:  
 
' Удаление крайних и двойных пробелов  
Sub TrimSpaces()  
Dim v As Range  
For Each v In ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants)  
v.Value = Trim(v)  
While InStr(1, v, "  ", vbTextCompare) > 0  
v.Value = Replace(v, "  ", " ")  
Wend  
Next  
End Sub  
 
--  
ZVI
 
{quote}{login=}{date=23.03.2008 10:49}{thema=}{post}Кто-нибудь помогите!{/post}{/quote}  
 
:'(
 
{quote}{login=ZVI}{date=23.03.2008 11:49}{thema=Re: сжатие пробелов в VBA}{post}{quote}{login=}{date=23.03.2008 10:49}{thema=}{post}Кто-нибудь помогите!{/post}{/quote}  
---  
Света, вот такой макрос поможет:  
 
' Удаление крайних и двойных пробелов  
Sub TrimSpaces()  
Dim v As Range  
For Each v In ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants)  
v.Value = Trim(v)  
While InStr(1, v, "  ", vbTextCompare) > 0  
v.Value = Replace(v, "  ", " ")  
Wend  
Next  
End Sub  
 
--  
ZVI{/post}{/quote}  
 
зависает документ :'(
 
{quote}{login=ZVI}{date=23.03.2008 11:49}{thema=Re: сжатие пробелов в VBA}{post}{quote}{login=}{date=23.03.2008 10:49}{thema=}{post}Кто-нибудь помогите!{/post}{/quote}  
---  
Света, вот такой макрос поможет:  
 
' Удаление крайних и двойных пробелов  
Sub TrimSpaces()  
Dim v As Range  
For Each v In ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants)  
v.Value = Trim(v)  
While InStr(1, v, "  ", vbTextCompare) > 0  
v.Value = Replace(v, "  ", " ")  
Wend  
Next  
End Sub  
 
--  
ZVI{/post}{/quote}  
---  
Так как движок этого форума, похоже, сам удалает двойные пробелы (сразу после v в двойных кавычках должно быть 2 пробела), то прилагаю файл с функцией  
---  
ZVI
 
{quote}{login=ZVI}{date=23.03.2008 11:58}{thema=Re: Re: сжатие пробелов в VBA}{post}{quote}{login=ZVI}{date=23.03.2008 11:49}{thema=Re: сжатие пробелов в VBA}{post}{quote}{login=}{date=23.03.2008 10:49}{thema=}{post}Кто-нибудь помогите!{/post}{/quote}  
---  
Света, вот такой макрос поможет:  
 
' Удаление крайних и двойных пробелов  
Sub TrimSpaces()  
Dim v As Range  
For Each v In ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants)  
v.Value = Trim(v)  
While InStr(1, v, "  ", vbTextCompare) > 0  
v.Value = Replace(v, "  ", " ")  
Wend  
Next  
End Sub  
 
--  
ZVI{/post}{/quote}  
---  
Так как движок этого форума, похоже, сам удалает двойные пробелы (сразу после v в двойных кавычках должно быть 2 пробела), то прилагаю файл с функцией  
---  
ZVI{/post}{/quote}  
 
спасибо за помощь
 
{quote}{login=ZVI}{date=23.03.2008 11:49}{thema=Re: сжатие пробелов в VBA}{post}{quote}{login=}{date=23.03.2008 10:49}{thema=}{post}Кто-нибудь помогите!{/post}{/quote}  
---  
Света, вот такой макрос поможет:  
 
' Удаление крайних и двойных пробелов  
Sub TrimSpaces()  
Dim v As Range  
For Each v In ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants)  
v.Value = Trim(v)  
While InStr(1, v, "  ", vbTextCompare) > 0  
v.Value = Replace(v, "  ", " ")  
Wend  
Next  
End Sub  
 
--  
ZVI{/post}{/quote}  
а подскажите как сделать что бы данный макрос запускался автоматически при вводе данных в определенную область?
 
Как вариант, немного изменил макрос ZVI:  
Sub TrimSpaces()  
ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants) = _  
Application.Trim(ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants))  
End Sub
Я сам - дурнее всякого примера! ...
 
Сегодня вечер "Выпускник-2008"?
 
> Как вариант, немного изменил макрос ZVI:  
> Sub TrimSpaces()  
 
Нет, Серж, это работает только с прямоугольнуми областями. Я на эти грабли наступил надавно:  
http://www.planetaexcel.ru/forum.php?thread_id=19446  
То есть надо либо со всем UsedRange (тогда формулы будут преобразованы в значения), либо по областям:  
 
Sub TrimSpaces()  
Dim a As Range  
For Each a In ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants).Areas  
   a = Application.Trim(a)  
Next  
End Sub  
 
Приложен файл, на котором можно попробовать.
 
Кстати, с объединенными ячейками нормально работает.
 
Дык, а где шла речь о непрямоугольных областях? Кстати, я читал ту тему, где ты наступал на эти грабли;-). И Юра прав, я глянул только на дату последнего поста. Спросонок, после ночной... Это demos_fobos виноват:-)  
demos_fobos, вешайте макрос на событие листа Change.
Я сам - дурнее всякого примера! ...
 
{quote}{login=света}{date=23.03.2008 07:52}{thema=сжатие пробелов в VBA}{post}подскажите, пожалуйста, код, который будет убирать лишние пробелы во всех ячейках листа. Вот, например, в excel есть функция "сжпробелы", но она оставляет по одному пробелу между словами и убирает пробелы перед первой и последней буквами. А мне надо, чтобы это делалось в VBA, при вызове макроса. Вставлять лишние столбцы в excel мне нельзя, т.к. поедут все формулы. Хотелось бы, чтобы при запуске макроса, данные просто заменялись темиже, только без лишних пробелов.  
Напишите, пожалуйста, код для столбца А.{/post}{/quote}  
 
Лишние пробелы удаляются, как только они были введены в ячейку : )
 
{quote}{login=}{date=24.05.2011 04:56}{thema=Re: сжатие пробелов в VBA}{post}{quote}{login=света}{date=23.03.2008 07:52}{thema=сжатие пробелов в VBA}{post}подскажите, пожалуйста, код, который будет убирать лишние пробелы во всех ячейках листа. Вот, например, в excel есть функция "сжпробелы", но она оставляет по одному пробелу между словами и убирает пробелы перед первой и последней буквами. А мне надо, чтобы это делалось в VBA, при вызове макроса. Вставлять лишние столбцы в excel мне нельзя, т.к. поедут все формулы. Хотелось бы, чтобы при запуске макроса, данные просто заменялись темиже, только без лишних пробелов.  
Напишите, пожалуйста, код для столбца А.{/post}{/quote}  
 
Лишние пробелы удаляются, как только они были введены в ячейку : ){/post}{/quote}  
 
извиняюсь за флуд) Забыл ник написать ^_^
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
{quote}{login=ZVI}{date=23.03.2008 11:58}{thema=Re: Re: сжатие пробелов в VBA}{post}{quote}{login=ZVI}{date=23.03.2008 11:49}{thema=Re: сжатие пробелов в VBA}{post}{quote}{login=}{date=23.03.2008 10:49}{thema=}{post}Кто-нибудь помогите!{/post}{/quote}  
---  
Света, вот такой макрос поможет:  
 
' Удаление крайних и двойных пробелов  
Sub TrimSpaces()  
Dim v As Range  
For Each v In ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants)  
v.Value = Trim(v)  
While InStr(1, v, "  ", vbTextCompare) > 0  
v.Value = Replace(v, "  ", " ")  
Wend  
Next  
End Sub  
 
--  
ZVI{/post}{/quote}  
---  
Так как движок этого форума, похоже, сам удалает двойные пробелы (сразу после v в двойных кавычках должно быть 2 пробела), то прилагаю файл с функцией  
---  
ZVI{/post}{/quote}  
 
эта штука хороша когда длинна строки <= 255. ЧТобы работало всегда см. мой ответ выше
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
{quote}{login=Юрий М}{date=25.09.2010 04:02}{thema=}{post}Сегодня вечер "Выпускник-2008"?{/post}{/quote}Нет, сегодня "Выпускник-2011" :)
Страницы: 1
Читают тему
Наверх