Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Долгая работа макроса с формулой округления - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Долгая работа макроса с формулой округления (Макросы/Sub)
Долгая работа макроса с формулой округления
fairylive Дата: Суббота, 24.06.2017, 17:16 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 101
Репутация: 3 ±
Замечаний: 0% ±

Excel 2016
Всем привет. Пишу с телефона поэтому не могу весь код сюда скопировать. Возникла проблема со следующей строкой:
[vba]
Код
Range("B7").FormulaR1C1 = "=ROUND(RC [8],1),0)"
[/vba]
Почему-то макрос на этом моменте задумывается на 2-3 секунды. Таких формулы две. Суть в чем, есть числа которые сначала надо округлить до десятых затем сразу до целых. Макрос подвисает именно на этой строчке. Хотя например при растягивании формулы ( autofill) зависания нет. Как можно округлить по другому?
Зачем вообще я так округляю? Есть числа у которых после запятой должен быть или 0 или 5. Но это не всегда так. Может быть например 240.000000456 или 870.5000000078 или 450.49999999567 мне надо чтобы числа стали целыми 240, 871, 451.
 
Ответить
СообщениеВсем привет. Пишу с телефона поэтому не могу весь код сюда скопировать. Возникла проблема со следующей строкой:
[vba]
Код
Range("B7").FormulaR1C1 = "=ROUND(RC [8],1),0)"
[/vba]
Почему-то макрос на этом моменте задумывается на 2-3 секунды. Таких формулы две. Суть в чем, есть числа которые сначала надо округлить до десятых затем сразу до целых. Макрос подвисает именно на этой строчке. Хотя например при растягивании формулы ( autofill) зависания нет. Как можно округлить по другому?
Зачем вообще я так округляю? Есть числа у которых после запятой должен быть или 0 или 5. Но это не всегда так. Может быть например 240.000000456 или 870.5000000078 или 450.49999999567 мне надо чтобы числа стали целыми 240, 871, 451.

Автор - fairylive
Дата добавления - 24.06.2017 в 17:16
AndreTM Дата: Суббота, 24.06.2017, 17:48 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1541
Репутация: 444 ±
Замечаний: 0% ±

2003 & 2010
Скорее всего,вы вставляете не одну формулу. Или от этой ячейки зависят другие, "и-и-и-и - автопересчёт!". Плюс ещё RC-формат со скобками (т.е. относительным смещением). Ну и формула какая-то странная, с непарной скобкой... :)

А зачем вообще вставлять формулу, если нужно именно значение, причем уже в макросе прямо посчитать можно?
[vba]
Код
Range("B7").Value = Round(Range("B7").Offset(, 8), 0)
[/vba]

Хотя да, если вы макросом желаете сформировать формулу, чтобы потом её же руками растянуть... Это да, это вин :D


Donate: Qiwi: 9517375010
 
Ответить
СообщениеСкорее всего,вы вставляете не одну формулу. Или от этой ячейки зависят другие, "и-и-и-и - автопересчёт!". Плюс ещё RC-формат со скобками (т.е. относительным смещением). Ну и формула какая-то странная, с непарной скобкой... :)

А зачем вообще вставлять формулу, если нужно именно значение, причем уже в макросе прямо посчитать можно?
[vba]
Код
Range("B7").Value = Round(Range("B7").Offset(, 8), 0)
[/vba]

Хотя да, если вы макросом желаете сформировать формулу, чтобы потом её же руками растянуть... Это да, это вин :D

Автор - AndreTM
Дата добавления - 24.06.2017 в 17:48
Michael_S Дата: Суббота, 24.06.2017, 17:53 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 1808
Репутация: 339 ±
Замечаний: 0% ±

Excel2016
А зачем вставлять формулу? может сразу макросом округлять и вставлять значения?

[offtop]не видел сообщение AndreTM, получился повтор....[/offtop]


ЯД: 41001136675053
WM: R389613894253


Сообщение отредактировал Michael_S - Суббота, 24.06.2017, 17:56
 
Ответить
СообщениеА зачем вставлять формулу? может сразу макросом округлять и вставлять значения?

[offtop]не видел сообщение AndreTM, получился повтор....[/offtop]

Автор - Michael_S
Дата добавления - 24.06.2017 в 17:53
fairylive Дата: Суббота, 24.06.2017, 19:01 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 101
Репутация: 3 ±
Замечаний: 0% ±

Excel 2016
AndreTM, скобку пропустил. С телефона сижу. Интернета на компенсации временно нет... все правильно я растягиваю формулу. Подумаю на счет округления макросов. Цикл надо будет замутить.
 
Ответить
СообщениеAndreTM, скобку пропустил. С телефона сижу. Интернета на компенсации временно нет... все правильно я растягиваю формулу. Подумаю на счет округления макросов. Цикл надо будет замутить.

Автор - fairylive
Дата добавления - 24.06.2017 в 19:01
AndreTM Дата: Суббота, 24.06.2017, 19:07 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 1541
Репутация: 444 ±
Замечаний: 0% ±

2003 & 2010
Цикл надо будет замутить

[vba]
Код
With Range("B7:B100")
    .Value = Round(.Offset(, 8).Value, 0)
End With
[/vba] :D


Donate: Qiwi: 9517375010

Сообщение отредактировал AndreTM - Суббота, 24.06.2017, 19:08
 
Ответить
Сообщение
Цикл надо будет замутить

[vba]
Код
With Range("B7:B100")
    .Value = Round(.Offset(, 8).Value, 0)
End With
[/vba] :D

Автор - AndreTM
Дата добавления - 24.06.2017 в 19:07
fairylive Дата: Суббота, 24.06.2017, 19:48 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 101
Репутация: 3 ±
Замечаний: 0% ±

Excel 2016
Не срабатывает так. Type mismatch.
 
Ответить
СообщениеНе срабатывает так. Type mismatch.

Автор - fairylive
Дата добавления - 24.06.2017 в 19:48
AndreTM Дата: Суббота, 24.06.2017, 19:50 | Сообщение № 7
Группа: Друзья
Ранг: Старожил
Сообщений: 1541
Репутация: 444 ±
Замечаний: 0% ±

2003 & 2010
Ну, это уже ваши проблемы. :)

Мы примера ваших таблиц не видели.


Donate: Qiwi: 9517375010
 
Ответить
СообщениеНу, это уже ваши проблемы. :)

Мы примера ваших таблиц не видели.

Автор - AndreTM
Дата добавления - 24.06.2017 в 19:50
fairylive Дата: Суббота, 24.06.2017, 20:50 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 101
Репутация: 3 ±
Замечаний: 0% ±

Excel 2016
))) понятно что мои проблемы. Округление макросом с диапазоном из одной ячейки работает. А вот с большим диапазоном ошибка не соответствия типов.
Походу дела косяк был не в формуле. Еще раз походил пошагово по коду. Макрос зависал на строке которая была перед вставкой формулы в ячейку.
[vba]
Код

Range ("b7:c27").copy range ("j7")
[/vba]
Эта строчка стала такой после того как я причесал то что записал макрорекордер.
Заменил ее на
[vba]
Код
Range ("b7:c7").copy
Range ("j7").pastespecial
[/vba]
Вобщем все стало летать. Спасибо всем за участие!
 
Ответить
Сообщение))) понятно что мои проблемы. Округление макросом с диапазоном из одной ячейки работает. А вот с большим диапазоном ошибка не соответствия типов.
Походу дела косяк был не в формуле. Еще раз походил пошагово по коду. Макрос зависал на строке которая была перед вставкой формулы в ячейку.
[vba]
Код

Range ("b7:c27").copy range ("j7")
[/vba]
Эта строчка стала такой после того как я причесал то что записал макрорекордер.
Заменил ее на
[vba]
Код
Range ("b7:c7").copy
Range ("j7").pastespecial
[/vba]
Вобщем все стало летать. Спасибо всем за участие!

Автор - fairylive
Дата добавления - 24.06.2017 в 20:50
Michael_S Дата: Суббота, 24.06.2017, 20:52 | Сообщение № 9
Группа: Друзья
Ранг: Старожил
Сообщений: 1808
Репутация: 339 ±
Замечаний: 0% ±

Excel2016
[vba]
Код
Dim Cel As Range
For Each Cel In Range("B7:B100")
    Cel.Value = Cel.Round(.Offset(, 8).Value, 0)
Next
[/vba]


ЯД: 41001136675053
WM: R389613894253
 
Ответить
Сообщение[vba]
Код
Dim Cel As Range
For Each Cel In Range("B7:B100")
    Cel.Value = Cel.Round(.Offset(, 8).Value, 0)
Next
[/vba]

Автор - Michael_S
Дата добавления - 24.06.2017 в 20:52
AndreTM Дата: Суббота, 24.06.2017, 21:26 | Сообщение № 10
Группа: Друзья
Ранг: Старожил
Сообщений: 1541
Репутация: 444 ±
Замечаний: 0% ±

2003 & 2010
Михаил, ты пишешь то же самое,что и с With же :)

fairylive, "объединенные ячейки - зло" (с), "макрорекордер - порождение хаоса" (с)
Ну и если надо копировать что-то диапазонами, и именно через ".Copy" - то .Pastespecial имеет много гитик, как вы уже успели заметить, наверное :)


Donate: Qiwi: 9517375010

Сообщение отредактировал AndreTM - Суббота, 24.06.2017, 21:32
 
Ответить
СообщениеМихаил, ты пишешь то же самое,что и с With же :)

fairylive, "объединенные ячейки - зло" (с), "макрорекордер - порождение хаоса" (с)
Ну и если надо копировать что-то диапазонами, и именно через ".Copy" - то .Pastespecial имеет много гитик, как вы уже успели заметить, наверное :)

Автор - AndreTM
Дата добавления - 24.06.2017 в 21:26
Michael_S Дата: Суббота, 24.06.2017, 22:38 | Сообщение № 11
Группа: Друзья
Ранг: Старожил
Сообщений: 1808
Репутация: 339 ±
Замечаний: 0% ±

Excel2016
то же самое,что и с With же
совсем другое. Андрей, ты пытаешься округлить сразу весь диапазон; VBA этого не умеет.


ЯД: 41001136675053
WM: R389613894253


Сообщение отредактировал Michael_S - Суббота, 24.06.2017, 22:39
 
Ответить
Сообщение
то же самое,что и с With же
совсем другое. Андрей, ты пытаешься округлить сразу весь диапазон; VBA этого не умеет.

Автор - Michael_S
Дата добавления - 24.06.2017 в 22:38
AndreTM Дата: Воскресенье, 25.06.2017, 11:09 | Сообщение № 12
Группа: Друзья
Ранг: Старожил
Сообщений: 1541
Репутация: 444 ±
Замечаний: 0% ±

2003 & 2010
А, извиняюсь, не подумал.. Но всё равно есть у меня мысль, что можно целиком с диапазоном проделать как-то...


Donate: Qiwi: 9517375010
 
Ответить
СообщениеА, извиняюсь, не подумал.. Но всё равно есть у меня мысль, что можно целиком с диапазоном проделать как-то...

Автор - AndreTM
Дата добавления - 25.06.2017 в 11:09
fairylive Дата: Воскресенье, 25.06.2017, 12:32 | Сообщение № 13
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 101
Репутация: 3 ±
Замечаний: 0% ±

Excel 2016
Ребят я извиняюсь конечно. Но проблема как исчезла сама так снова сама вернулась. Засыпал когда, макрос работал мгновенно. Сегодня проснулся и опять тормозит. Видимо у меня что то с самим Excel. Причем если зажать f8 пошагово макрос выполнится быстрее чем через f5. В любом случае спасибо за ответы!
 
Ответить
СообщениеРебят я извиняюсь конечно. Но проблема как исчезла сама так снова сама вернулась. Засыпал когда, макрос работал мгновенно. Сегодня проснулся и опять тормозит. Видимо у меня что то с самим Excel. Причем если зажать f8 пошагово макрос выполнится быстрее чем через f5. В любом случае спасибо за ответы!

Автор - fairylive
Дата добавления - 25.06.2017 в 12:32
AndreTM Дата: Воскресенье, 25.06.2017, 12:53 | Сообщение № 14
Группа: Друзья
Ранг: Старожил
Сообщений: 1541
Репутация: 444 ±
Замечаний: 0% ±

2003 & 2010
Попробуй отключать на время исполнения макроса автопересчеты и отображение экрана.
[vba]
Код
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
' работа
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
[/vba]


Donate: Qiwi: 9517375010
 
Ответить
СообщениеПопробуй отключать на время исполнения макроса автопересчеты и отображение экрана.
[vba]
Код
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
' работа
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
[/vba]

Автор - AndreTM
Дата добавления - 25.06.2017 в 12:53
fairylive Дата: Воскресенье, 25.06.2017, 13:37 | Сообщение № 15
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 101
Репутация: 3 ±
Замечаний: 0% ±

Excel 2016
Обновление экрана отключаю всегда. А вот вычисления в ручном режиме портят правильность вычислений видимо как раз из-за формулы на листе и главное не ускоряют работу.

Бляяяяяаааа... пока писал вспомнил что вчера еще делал перед тем как само все стало быстро работать. Я закрыл Download Master. Видимо когда нет интернета он каким-то образом мешает Excel. Проверил сейчас - так и есть. Все опять летает. При этом закачек никаких нет. DM просто висит в трее. Стоит его закрыть макрос начинает исполняться мгновенно. Если снова открыть - макрос исполняется 6 секунд. Чудеса! Если что версия DM 6.12.4.1555. Ms Office 2016. Напишу потом разработчикам DM.
 
Ответить
СообщениеОбновление экрана отключаю всегда. А вот вычисления в ручном режиме портят правильность вычислений видимо как раз из-за формулы на листе и главное не ускоряют работу.

Бляяяяяаааа... пока писал вспомнил что вчера еще делал перед тем как само все стало быстро работать. Я закрыл Download Master. Видимо когда нет интернета он каким-то образом мешает Excel. Проверил сейчас - так и есть. Все опять летает. При этом закачек никаких нет. DM просто висит в трее. Стоит его закрыть макрос начинает исполняться мгновенно. Если снова открыть - макрос исполняется 6 секунд. Чудеса! Если что версия DM 6.12.4.1555. Ms Office 2016. Напишу потом разработчикам DM.

Автор - fairylive
Дата добавления - 25.06.2017 в 13:37
fairylive Дата: Воскресенье, 25.06.2017, 13:39 | Сообщение № 16
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 101
Репутация: 3 ±
Замечаний: 0% ±

Excel 2016
Короче проблема решена!
 
Ответить
СообщениеКороче проблема решена!

Автор - fairylive
Дата добавления - 25.06.2017 в 13:39
AndreTM Дата: Воскресенье, 25.06.2017, 15:47 | Сообщение № 17
Группа: Друзья
Ранг: Старожил
Сообщений: 1541
Репутация: 444 ±
Замечаний: 0% ±

2003 & 2010
Вы там случайно у себя в макросе не используете копирование через буфер обмена? А то ведь да, при включенной в DM опции контроля буфера по поводу поиска ссылок на закачки - он вам тормоза и устроит...


Donate: Qiwi: 9517375010
 
Ответить
СообщениеВы там случайно у себя в макросе не используете копирование через буфер обмена? А то ведь да, при включенной в DM опции контроля буфера по поводу поиска ссылок на закачки - он вам тормоза и устроит...

Автор - AndreTM
Дата добавления - 25.06.2017 в 15:47
fairylive Дата: Воскресенье, 25.06.2017, 16:05 | Сообщение № 18
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 101
Репутация: 3 ±
Замечаний: 0% ±

Excel 2016
Так собственно copy. Копирую сначала исходные данные в сторонку. Затем округляю их до десятых. Затем копирую опять и вставляю только значение на место исходных данных. Потом все это повторяется с округлением до целых. Операций много конечно и наверно есть способ лучше. Но без DM все происходит мгновенно а большего мне и не надо. Собственно как я уже писал выше тормоза были на строчке с копированием.
 
Ответить
СообщениеТак собственно copy. Копирую сначала исходные данные в сторонку. Затем округляю их до десятых. Затем копирую опять и вставляю только значение на место исходных данных. Потом все это повторяется с округлением до целых. Операций много конечно и наверно есть способ лучше. Но без DM все происходит мгновенно а большего мне и не надо. Собственно как я уже писал выше тормоза были на строчке с копированием.

Автор - fairylive
Дата добавления - 25.06.2017 в 16:05
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Долгая работа макроса с формулой округления (Макросы/Sub)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2017 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!