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

Вход

Регистрация

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

 

= Мир MS Excel/выполнение двух генераторов СЧ без промежуточных ячеек - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » выполнение двух генераторов СЧ без промежуточных ячеек (Макросы/Sub)
выполнение двух генераторов СЧ без промежуточных ячеек
Markovich Дата: Вторник, 22.12.2020, 21:39 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 50
Репутация: 0 ±
Замечаний: 0% ±

Excel 2019
Доброго времени суток, уважаемые форумчане! Пытаюсь победить задачу по оптимизации и ускорению работы таблицы, но не все получается сделать самостоятельно. И снова обращаюсь на замечательный форум, где уже не единожды помогали настоящие профессионалы своего дела. Задача такая: есть ГСЧ генератор 1, который генерит в столбец с 11 строки до заданной n. Далее при помощи формул из сгенерированного числа с помощью множителя и округлить вверх/вниз создается диапазон для генератора 2, который генерит на 50 столбцов n строк. Генераторы адаптировал на основе кода из http://www.excelworld.ru/forum/10-46484-1, любезно написанным Kuzmich(ом). Использовать две кнопки неудобно, поэтому с помощью третьего макроса, запускающего последовательно два данных макроса создал одну кнопку. Но из-за того что есть промежуточные вычисления в ячейках выполнение макросов заметно тормозит. Проблему с торможением решил третьим макросом: сначала перевод в режим ручного пересчета формул, после выполнения генератора 1 пересчет формул, затем выполнение генератора 2 и в окончание включение автоматического пересчета формул. Возможно ли как то оптимизировать данные процессы с помощью выполнения одного макроса без использования промежуточных вычислений в ячейках с формулами, т.е. чтобы в одном макросе сработал генератор 1, затем на основании сгенерированного числа получаем диапазон (умножение числа на коэффициенты и округление вверх/вниз) и далее работа генератора 2?
К сообщению приложен файл: 2003.xls (77.0 Kb)
 
Ответить
СообщениеДоброго времени суток, уважаемые форумчане! Пытаюсь победить задачу по оптимизации и ускорению работы таблицы, но не все получается сделать самостоятельно. И снова обращаюсь на замечательный форум, где уже не единожды помогали настоящие профессионалы своего дела. Задача такая: есть ГСЧ генератор 1, который генерит в столбец с 11 строки до заданной n. Далее при помощи формул из сгенерированного числа с помощью множителя и округлить вверх/вниз создается диапазон для генератора 2, который генерит на 50 столбцов n строк. Генераторы адаптировал на основе кода из http://www.excelworld.ru/forum/10-46484-1, любезно написанным Kuzmich(ом). Использовать две кнопки неудобно, поэтому с помощью третьего макроса, запускающего последовательно два данных макроса создал одну кнопку. Но из-за того что есть промежуточные вычисления в ячейках выполнение макросов заметно тормозит. Проблему с торможением решил третьим макросом: сначала перевод в режим ручного пересчета формул, после выполнения генератора 1 пересчет формул, затем выполнение генератора 2 и в окончание включение автоматического пересчета формул. Возможно ли как то оптимизировать данные процессы с помощью выполнения одного макроса без использования промежуточных вычислений в ячейках с формулами, т.е. чтобы в одном макросе сработал генератор 1, затем на основании сгенерированного числа получаем диапазон (умножение числа на коэффициенты и округление вверх/вниз) и далее работа генератора 2?

Автор - Markovich
Дата добавления - 22.12.2020 в 21:39
Kuzmich Дата: Вторник, 22.12.2020, 23:16 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 711
Репутация: 155 ±
Замечаний: 0% ±

Excel 2003
Не понимаю назначение листа service, когда все можно сделать на одном листе
[vba]
Код
Option Explicit
'последняя строка для генератора перенесена в лист service1 в ячейку B2
'запускк при активном листе service1
Sub random_service_Генератор_1_2()
Application.ScreenUpdating = False
Dim i As Long
Dim j As Long
  For i = 11 To Range("B2")
    Randomize
    'СЛУЧ_МЕЖДУ = Int((верх_граница - нижн_граница + 1) * Rnd + нижн_граница)
    Cells(i, "B") = Int((Cells(5, "D") - Cells(5, "C") + 1) * Rnd + Cells(5, "C"))
    Cells(i, "D") = WorksheetFunction.RoundDown(Cells(i, "B") * 0.85, 0)
    Cells(i, "E") = WorksheetFunction.RoundUp(Cells(i, "B") * 1.15, 0)
      For j = 7 To 56
        Randomize
        Cells(i, j) = Int((Cells(i, "E") - Cells(i, "D") + 1) * Rnd + Cells(i, "D"))
      Next
  Next
Application.ScreenUpdating = True
End Sub
[/vba]
 
Ответить
СообщениеНе понимаю назначение листа service, когда все можно сделать на одном листе
[vba]
Код
Option Explicit
'последняя строка для генератора перенесена в лист service1 в ячейку B2
'запускк при активном листе service1
Sub random_service_Генератор_1_2()
Application.ScreenUpdating = False
Dim i As Long
Dim j As Long
  For i = 11 To Range("B2")
    Randomize
    'СЛУЧ_МЕЖДУ = Int((верх_граница - нижн_граница + 1) * Rnd + нижн_граница)
    Cells(i, "B") = Int((Cells(5, "D") - Cells(5, "C") + 1) * Rnd + Cells(5, "C"))
    Cells(i, "D") = WorksheetFunction.RoundDown(Cells(i, "B") * 0.85, 0)
    Cells(i, "E") = WorksheetFunction.RoundUp(Cells(i, "B") * 1.15, 0)
      For j = 7 To 56
        Randomize
        Cells(i, j) = Int((Cells(i, "E") - Cells(i, "D") + 1) * Rnd + Cells(i, "D"))
      Next
  Next
Application.ScreenUpdating = True
End Sub
[/vba]

Автор - Kuzmich
Дата добавления - 22.12.2020 в 23:16
Markovich Дата: Вторник, 22.12.2020, 23:50 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 50
Репутация: 0 ±
Замечаний: 0% ±

Excel 2019
Kuzmich, и снова Вы мне помогли. Большое спасибо! лист service заполнен формулами, на нем много других вычислений, а результаты генераторов (их много) решил перенести на отдельный лист. значение последней строки для генератора расчетная формулами и участвует в других операциях, поэтому и находится на листе service. Но как скажете, пусть через
Код
=service!A3
дублируется на service1. Еще раз, спасибо, буду обкатывать.
 
Ответить
СообщениеKuzmich, и снова Вы мне помогли. Большое спасибо! лист service заполнен формулами, на нем много других вычислений, а результаты генераторов (их много) решил перенести на отдельный лист. значение последней строки для генератора расчетная формулами и участвует в других операциях, поэтому и находится на листе service. Но как скажете, пусть через
Код
=service!A3
дублируется на service1. Еще раз, спасибо, буду обкатывать.

Автор - Markovich
Дата добавления - 22.12.2020 в 23:50
Мир MS Excel » Вопросы и решения » Вопросы по VBA » выполнение двух генераторов СЧ без промежуточных ячеек (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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