Найти в Дзене
Игры в Excel

Как "прикрутить время" к игре? на примере таблиц Шульте

В служебном листе "С" перед тем как изменять наш макрос, надо определить две ячейки, желательно стоящих рядом, с именами "старт" и "финиш". Теперь перейдём к макросам. Выберем наш. Правый клик по кнопке —> выбираем "Назначить макрос" (уже имеется) —> и жмём "Править" Вот эти две строки: ---------------------------------------------------------------------------------------- Range("старт").Value = Now Range("финиш").Value = 0 Команда Now зафиксирует в ячейке "старт" время выдачи задания. А ячейку "финиш" мы обнулим, чтобы во время выполнения задания, нас не нервировали ненужные надписи на экране. А к новой красной кнопке надо привязать новый макрос ---------------------------------------------------------------------------------------- Sub Завершить() Range("финиш") = Now End Sub Всё остальное делают уже не коды, а общедоступные формулы Excel Вернёмся в служебный лист С разница находится как обычная разность между финишем и стартом по формуле = финиш - старт Но это настолько маленькое
Вот к этой кнопе привязан макрос. Надо его немного изменить, но перед этим проделаем несколько манипуляций:
Вот к этой кнопе привязан макрос. Надо его немного изменить, но перед этим проделаем несколько манипуляций:

В служебном листе "С" перед тем как изменять наш макрос, надо определить две ячейки, желательно стоящих рядом, с именами "старт" и "финиш".

Фрагмент служебного листа С
Фрагмент служебного листа С

Теперь перейдём к макросам. Выберем наш. Правый клик по кнопке —> выбираем "Назначить макрос" (уже имеется) —> и жмём "Править"

В него надо вставить две новые строки. Сюда, где это показано на картинке или после маркера fin: перед End Sub
В него надо вставить две новые строки. Сюда, где это показано на картинке или после маркера fin: перед End Sub

Вот эти две строки:

----------------------------------------------------------------------------------------

Range("старт").Value = Now

Range("финиш").Value = 0

Команда Now зафиксирует в ячейке "старт" время выдачи задания. А ячейку "финиш" мы обнулим, чтобы во время выполнения задания, нас не нервировали ненужные надписи на экране.

А к новой красной кнопке надо привязать новый макрос

----------------------------------------------------------------------------------------

Sub Завершить()

Range("финиш") = Now

End Sub

Всё остальное делают уже не коды, а общедоступные формулы Excel

Вернёмся в служебный лист С

разница находится как обычная разность между финишем и стартом по формуле = финиш - старт

Но это настолько маленькое число. Что нам с ним делать?

Можно просто вывести ссылку на эту ячейку на игровом листе в формуле времени. Он покажет понятные 00:01:28.
Мне же хотелось встроить этот показатель во фразу и видеть время только в секундах без двоеточий и лишних нулей.
Сутки текущие от следующих отличаются на единицу, таким образом час это 1/24 единицы, а секунда - показано на моей иллюстрации

Осталось только разделить разницу на этот мизерное число, равное доли секунды в сутках.

Строка на игровом экране появляется только после нажатия красной кнопки. Это можно сделать с помощью условного форматирования или напрямую задать в формуле (как это сделала я)

=ЕСЛИ(финиш=0;"";"вы управились за "&результат&" секунд")

А теперь сделаем страничку для записи наших результатов

Внесём несколько изменений в листы игры и служебный.

Добавим поле для имени. Присвоим имя этой ячейке. У меня это "нама"
Добавим поле для имени. Присвоим имя этой ячейке. У меня это "нама"

Вставим новый лист. Назовём его например, "архив"

а в листе "С" сделаем новую переменную "прот" (протокол)

формула этой ячейки будет такова:

=СЧЁТЗ(Архив!A:A)+1

а макрос красной кнопки теперь будет выглядеть так:

----------------------------------------------------------------------------------------

Sub Завершить()

Range("финиш") = Now

strok = Range("прот").Value

Calculate

Sheets("Архив").Cells(strok, 1).Value = Range("нама").Value

Sheets("Архив").Cells(strok, 2).Value = Range("результат").Value

Sheets("Архив").Cells(strok, 3).Value = Format(Range("старт").Value, "dd MMM yy")

End Sub

Если всё сделали правильно, должно работать. Попробуйте

Если бы я делала это приложения для работы с группой детей, то непременно оформила бы отдельным листом комнату славы, передающийся кубок, рекордсменов недели, звания при достижении разных временных уровней (существительное) или количеству игр (прилагательное) и были бы звания "усидчивый черепашка", "залётный копушка" или "регулярный гений". Мало ли что ещё можно придумать))).