A Ray le gustaría, si es posible, una forma de animar un «recuento» de un valor en una celda. Por ejemplo, en la celda B7 podría tener un valor de 23. Le gustaría hacer referencia a ese valor en la celda E4 y hacer que la celda E4 cuente de 0 a 23 (0, 1, 2, 3, etc.), mostrando cada número en turno.

No hay una forma incorporada de hacer esto en Excel, pero puede usar una macro para hacer la animación. Básicamente, la macro necesitaría averiguar qué hay en la celda B7 y luego usar un bucle For …​ Next para recorrer los valores entre 0 y lo que esté en B7. Durante cada iteración del ciclo, se cambia el valor en E4 y se introduce algún tipo de retraso.

La parte de retraso de la macro es lo que realmente proporciona la capacidad de variar la forma en que la macro hace su trabajo. El retraso es necesario para que la animación parezca funcionar; sin él, los números en E4 aumentarían demasiado rápido. Excel proporciona un par de formas prácticas de implementar el retraso. Por ejemplo, este ejemplo de la macro se basa en la función Sleep:

#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

Este código debe agregarse al módulo ThisWorksheet, ya que está diseñado para ejecutarse cada vez que algo cambia en la hoja de trabajo. El código verifica si la celda que se está cambiando es la celda objetivo (B7). Si es así, toma el valor allí y salta a un bucle For …​ Next que actualiza lo que esté en la celda E4. La función Sleep se utiliza para retrasar, en este caso, 200 milisegundos entre cada actualización de E4.

Si desea una macro que sea más corta y no se base en el controlador de eventos Worksheet_Change, podría considerar lo siguiente. Utiliza el método Wait para hacer una pausa en el bucle 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

Esta versión de la macro se detiene un segundo completo entre cada actualización de la celda E4.

Siempre que use una macro como esta que implemente algún tipo de retraso, recuerde que su hoja de trabajo puede parecer menos receptiva. Esto se debe a ese retraso y por grande que sea el valor de la celda E4. (Cuanto mayor sea el valor, mayor será la demora agregada.)

_Nota: _

Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil.

link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador].

ExcelTips es su fuente de formación rentable en Microsoft Excel.

Este consejo (13753) se aplica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 y Excel en Office 365.