В преддверии праздников уж очень хочется чего-то необычного и немного волшебного 😉
Особой магией мы конечно не обладаем, но сгенерировать предсказание на 2024 год - это пожалуй возможно!
В данном обзоре мы предлагаем свой вариант игры "Колесо фортуны" реализованный посредством генерирования случайного числа и применения методов Calculate и IncrementRotation.
📢 Файл с примером размещен в конце статьи 🔽
▶️ Готовим шаблон колеса фортуны
Мы заведомо не используем готовые изображения, чтобы еще раз продемонстрировать, что все необходимое уже есть в Excel.
Итак, используя базовый набор фигур создадим шаблон:
Например:
Для группы фигур образующих элемент на который будет назначено вращение назначим имя "Стрелка".
А в ячейке А1 пропишем формулу: =СЛЧИС():
Данная функция не имеет аргументов и возвращает случайное число от 0 до 1 при каждом пересчете.
✨ Такой подход в связке с методом Calculate позволит задать стрелке требуемое вращение.
▶️ IncrementRotation
- метод, который можно использовать в для изменения угла поворота объекта на листе Excel.
IncrementRotation применим к объектам, которые поддерживают вращение, таким как формы, изображения и другие элементы.
Метод может быть полезен, например, при создании анимации или динамических изменений в листе Excel. Вы можете использовать его вместе с циклами и условиями для создания интересных эффектов.
▶️ Calculate
- является одним из базовых методов, используемых для пересчета формул и обновления данных в рабочей книге.
📝 Основные аспекты использования:
- Пересчет формул: Calculate применяется для пересчета всех формул в рабочей книге, включая все листы и ячейки. Метод будет полезен, когда в файле есть формулы, зависящие от ячеек, которые содержат функции, данные или формулы.
- Использование в коде VBA: метод может быть использован для явного запуска процесса пересчета.
Например: ActiveSheet.Calculate - пересчитывает все формулы на активном листе. - Обновление связанных данных: в некоторых сценариях, когда данные подтягиваются из внешних источников, Calculate может использоваться для обновления этих данных.
🔷 В целом, метод Calculate предоставляет пользователю дополнительный контроль над процессом пересчета и может быть полезен в ситуациях, когда автоматический пересчет не срабатывает или когда нужно явно обновить формулы.
▶️ Генерация случайного целого числа в заданном диапазоне
Чтобы сгенерировать случайное число при помощи VBA следует использовать тип данных Int и функцию Rnd.
Например,
⚙️ Краткое описание:
- Rnd - встроенная функция VBA, которая возвращает случайное число с плавающей запятой в диапазоне от 0 (включительно) до 1 (исключительно).
- выражение (300 - 150 + 1) определяет диапазон чисел, из которого будет выбрано случайное значение. В данном случае, это от 150 до 300 включительно. Вычитание 150 регулирует диапазон, а добавление 1 учитывает верхнюю границу.
- Int(...) - функция округления в меньшую сторону, которая используется для преобразования случайного числа с плавающей запятой, возвращаемого Rnd, в целое число.
🔷 В результате выполнения этой строки переменная randomValue будет содержать случайное целое число из указанного диапазона.
▶️ Пишем код
Все методы мы рассмотрели, теперь осталось применить их для рассматриваемого примера:
⚙️ Краткое описание:
- randomValue: переменная, в которой генерируется случайное значение между 150 и 300, которое используем в цикле для задания числа вращений (подробно рассмотрено выше);
- Цикл For: выполняет поворот стрелки в случайное число раз в соответствии со значением переменной randomValue;
- ActiveSheet.Calculate: обновляет значения формул на активном листе;
- IncrementRotation: метод, применяемый к форме "Стрелка", увеличивает ее угол поворота (в условиях примера принято значение 10).
🔔 Важно!
- чтобы обеспечить плавность вращения не рекомендуем задавать угол поворота более 15;
- чем меньше значение угла, тем медленней будет вращаться стрелка.
➡️ Чтобы сбросить результат и вернуть стрелку в начальное положение можно применить следующий поход:
При выполнении макроса угол поворота устанавливается в ноль, возвращая объект в исходное положение.
▶️ Тестируем результат
Вот такое предсказание получили мы:
А что выпало вам!? 😉
Пиши ответ в комментариях. Будем рады вашей обратной связи 💖
🔶 Другие материалы новогодней подборки:
🔔 Узнать больше о приемах и методах в Excel и быстро найти нужное решение поможет наш справочник 🔽