Рэй хотел бы, если это возможно, способ анимировать «подсчет» для значения в ячейке. Например, в ячейке B7 он может иметь значение 23. Он хотел бы сослаться на это значение в ячейке E4, и чтобы ячейка E4 считала от 0 до 23 (0, 1, 2, 3 и т. Д.), Показывая каждое число. в очереди.

В Excel нет встроенного способа сделать это, но вы можете использовать макрос для создания анимации. По сути, макросу необходимо выяснить, что находится в ячейке B7, а затем использовать цикл For …​ Next для перехода по значениям между 0 и тем, что находится в B7. Во время каждой итерации цикла значение в E4 изменяется и вводится некоторая задержка.

Задержка макроса — это то, что на самом деле дает возможность изменять способ выполнения макроса своей работы. Задержка необходима, чтобы анимация работала; без него числа в E4 увеличивались бы слишком быстро. В Excel есть несколько удобных способов реализовать задержку. Например, в этом примере макроса используется функция сна:

#If VBA7 Then Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

#Else Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

#End If Private Sub Worksheet_Change(ByVal Target As Range)

Dim n As Integer     Const cellWatch As String = "$B$7"

Const cellCount As String = "$E$4"

Const msec As Long = 200 ' milliseconds     If Target.Address = cellWatch Then         Application.EnableEvents = False         Range(cellCount).Show         If IsNumeric(Target) Then             For n = 0 To Target ' skipped if Target < 0                 Range(cellCount) = n                 Sleep msec ' delay each increment             Next n         End If         Range(cellCount) = Target         Application.EnableEvents = True     End If End Sub

Этот код следует добавить в модуль ThisWorksheet, так как он предназначен для запуска каждый раз, когда что-то изменяется на листе. Код проверяет, является ли изменяемая ячейка целевой ячейкой (B7). Если это так, то он захватывает это значение и переходит в цикл For …​ Next, который обновляет все, что находится в ячейке E4. Функция сна используется для задержки, в этом случае, 200 миллисекунд между каждым обновлением E4.

Если вам нужен макрос, который короче и не полагается на обработчик событий Worksheet_Change, вы можете подумать о следующем. Он использует метод Wait для паузы в цикле For …​ Next:

Sub CountUp()

Dim J As Integer     For J = 0 To Range("B7").Value         Range("E4").Value = J         Application.Wait (Now + TimeValue("0:00:01"))

Next J     Range("E4").Value = Range("B7").Value End Sub

Эта версия макроса делает паузу в полсекунды между каждым обновлением ячейки E4.

Всякий раз, когда вы используете такой макрос, который реализует некоторую задержку, помните, что ваш рабочий лист может показаться менее отзывчивым. Это связано с этой задержкой и каким бы большим ни было значение в ячейке E4. (Чем больше значение, тем дольше совокупная задержка.)

_Примечание: _

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

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (13753) применим к Microsoft Excel 2007, 2010, 2013, 2016, 2019 и Excel в Office 365.