pinguindell Пользователь Сообщений: 200 |
#1 16.05.2013 09:54:10 Добрый день уважаемые знатоки Excel и VBA в частности.
Макрос успешно справляется со своей задачей, но работает очень долго, в особенности когда объем файла превышает 100 строк. Помогите пожалуйста оптимизировать код так, чтобы макрос работал быстрее, если это возможно. Прикрепленные файлы
|
||
Казанский Пользователь Сообщений: 8839 |
#2 16.05.2013 10:05:26
|
||
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#3 16.05.2013 10:19:37 Если не ошибаюсь, то можно еще так:
В принципе подход тот же. Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||
Казанский, The_Prist, спасибо большое. Как говориться — все гениальное просто ! |
|
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
Забыл добавить ложку дегтя в примечание к своему коду. Код Казанского лучше, т.к. обработает любую строку. Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
fvg Пользователь Сообщений: 33 |
Добрый день. А можно переделать этот макрос, чтоб он удалял не лишние, а все пробелы в выделенных ячейках? Изменено: fvg — 10.12.2014 22:57:44 |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
#7 10.12.2014 14:31:30 Вариант:
|
||
fvg Пользователь Сообщений: 33 |
Юрий М, все работает, cпасибо большое! |
Влад Пользователь Сообщений: 1189 |
#9 10.12.2014 16:14:39 Эээ… А цикл-то зачем? Достаточно
|
||
camypai Пользователь Сообщений: 32 |
#10 18.04.2016 15:09:53
красавчик Пирст))) помогло мне наконецто, ато целый день мучился)) |
||
kuklp Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
#11 18.04.2016 15:36:35
Так еще Диму никто не обзывал Я сам — дурнее всякого примера! … |
||
sv2013 Пользователь Сообщений: 657 |
#12 18.04.2016 17:26:05 еще вариант макроса ,кнопка vvv
Прикрепленные файлы
|
||
lazareva Пользователь Сообщений: 8 |
Как удалить пробелы внутри числа (неразрывный пробел) с помощью макроса. Сейчас использую «Найти и Заменить», так как формулу =СЖПРОБЕЛЫ(ПОДСТАВИТЬ(J5;СИМВОЛ(160);»»;1))*1 использовать в моем случае не удобно. |
Мотя Пользователь Сообщений: 3218 |
|
lazareva Пользователь Сообщений: 8 |
Спасибо, Мотя . Пробел забрала, но проблема не решена, сума не считает. |
Мотя Пользователь Сообщений: 3218 |
Как профессионально решить проблему — я не знаю. |
kuklp Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
#17 19.05.2016 16:24:26 Не, Матреш, будем проще
Изменено: kuklp — 19.05.2016 16:27:49 Я сам — дурнее всякого примера! … |
||
lazareva Пользователь Сообщений: 8 |
Спасибо, kuklp , сработало (окно Immeiate)! Остался один вопрос. Данные в документ вносятся каждый день. Что делать после ввода новых данных? Изменено: lazareva — 19.05.2016 17:41:34 |
kuklp Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
#19 19.05.2016 17:44:58 Да хоть то же самое. Или можете оформить его макросом, повесить на кнопку:
Я сам — дурнее всякого примера! … |
||
lazareva Пользователь Сообщений: 8 |
#20 20.05.2016 09:33:50 Мне стыдно,что я научилась только копировать макросы, а написать самой трудновато. Немножко потрудившись, вот что получилось. Работает, но мня не устраивает то что надо выделять диапазон перед выполнением макроса. Диапазонов у меня много и они разбросаны. Как сделать так, чтоб он работал в столбце I и столбце J пока не разобралась. Еще нужно учесть, что в этих столбцах будут данные, которые уже прошли через макрос
Изменено: lazareva — 20.05.2016 09:35:41 |
||
kuklp Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
#21 20.05.2016 09:42:43
Я сам — дурнее всякого примера! … |
||
lazareva Пользователь Сообщений: 8 |
kuklp
, большое спасибо! То что надо! |
kuklp Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
#23 20.05.2016 09:51:39 Вариант:
Я сам — дурнее всякого примера! … |
||
IvI80 Пользователь Сообщений: 36 |
Подскажите, пожалуйста, как переделать код Казанского, чтобы он выполнялся не только в отдельном столбце, а в произвольно выбранном диапазоне? |
GroshevDV Пользователь Сообщений: 16 |
Казанский, The_Prist, Спасибо ОГРОМНОЕ! Очень мне помогли ваши решения. |
DARR Пользователь Сообщений: 42 |
#26 15.07.2019 12:58:12
Добрый день. Как в данном макросе задать только видимый диапазон ячеек столбца I ? Дело в том, что на столбце A стоит автофильтр и часть строк скрыто, поэтому надо, чтобы обрабатывались только видимые ячейки |
||
casag Пользователь Сообщений: 175 |
#27 15.07.2019 16:53:16 DARR, у меня получилось так
|
||
kuklp Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
#28 15.07.2019 17:05:00 Так д.б. шустрей:
Я сам — дурнее всякого примера! … |
||
Jack Famous Пользователь Сообщений: 10852 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
Добавлю, что Application.Trim при применении к массиву равен по скорости применению в прямом цикле, только запись короче Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
DARR Пользователь Сообщений: 42 |
#30 16.07.2019 08:01:56 kuklp, casag, супер! спасибо! |
Удаление лишних пробелов из строк с помощью кода 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.3k.
Что делает макрос: Частая проблема при импорте данных из других источников — это начальные или конечные пробелы. Данный макрос позволит легко удалить лишние пробелы в ячейках.
Содержание
- Как макрос работает
- Код макроса
- Как этот код работает
- Как использовать
Как макрос работает
В этом макросе, мы перебираем диапазон, проверяя каждую ячейку с помощью функции 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 объявляет две переменные объекта Range.
- Мы должны сохранить книгу перед запуском макроса.
- Шаг 3 заполняет переменную MyRange с целевым диапазоном.
- После того, как клетка активируется, Шаг 5 использует Not IsEmpty функцию, которая удаляет лишние пробелы
- Шаг 6 повторяет цикл, чтобы получить следующую ячейку. После просмотра всех ячеек в целевом диапазоне макрос заканчивается.
Как использовать
Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:
- Активируйте редактор Visual Basic, нажав ALT + F11.
- Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
- Выберите Insert➜Module.
Удалить пробелы макросом |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |