Ray vorrebbe, se possibile, un modo per animare un “conteggio in avanti” per un valore in una cella. Ad esempio, nella cella B7 potrebbe avere un valore 23. Vorrebbe fare riferimento a quel valore nella cella E4 e fare in modo che la cella E4 conti da 0 a 23 (0, 1, 2, 3, ecc.), Mostrando ogni numero a sua volta.

Non esiste un modo integrato per eseguire questa operazione in Excel, ma è possibile utilizzare una macro per eseguire l’animazione. Fondamentalmente, la macro dovrebbe scoprire cosa c’è nella cella B7, quindi utilizzare un ciclo For …​ Next per scorrere i valori tra 0 e tutto ciò che è in B7. Durante ogni iterazione del ciclo, il valore in E4 viene modificato e viene introdotta una sorta di ritardo.

La parte di ritardo della macro è ciò che fornisce effettivamente la possibilità di variare il modo in cui la macro fa il suo lavoro. Il ritardo è necessario per far sembrare che l’animazione funzioni; senza di essa, i numeri in E4 aumenterebbero troppo rapidamente. Excel fornisce un paio di modi pratici per implementare il ritardo. Ad esempio, questo esempio della macro si basa sulla funzione 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

Questo codice dovrebbe essere aggiunto al modulo ThisWorksheet, poiché è progettato per essere eseguito ogni volta che qualcosa cambia nel foglio di lavoro. Il codice verifica se la cella da modificare è la cella di destinazione (B7). Se lo è, acquisisce il valore e salta in un ciclo For …​ Next che aggiorna tutto ciò che si trova nella cella E4. La funzione Sleep viene utilizzata per ritardare, in questo caso, 200 millisecondi tra ogni aggiornamento di E4.

Se desideri una macro più breve e non si basa sul gestore di eventi Worksheet_Change, potresti considerare quanto segue. Utilizza il metodo Wait per mettere in pausa il ciclo 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

Questa versione della macro sospende un secondo intero tra ogni aggiornamento alla cella E4.

Ogni volta che utilizzi una macro come questa che implementa una sorta di ritardo, ricorda che il tuo foglio di lavoro potrebbe sembrare meno reattivo. Ciò è dovuto a quel ritardo e per quanto grande sia il valore che si trova nella cella E4. (Maggiore è il valore, maggiore è il ritardo aggregato.)

_Nota: _

Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.

ExcelTips è la tua fonte di formazione economica su Microsoft Excel.

Questo suggerimento (13753) si applica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 e Excel in Office 365.