Come creare un conteggio automatico nel tuo foglio di lavoro

Riccardo vorrebbe, se possibile, un modo per animare un “conteggio” come valore per una cella. Ad esempio, nella cella B7 potrebbe avere un valore di 23. Vorrebbe fare riferimento a quel valore nella cella E4 e far contare la cella E4 da 0 a 23 (0, 1, 2, 3, ecc.), mostrando ogni numero per un breve periodo di tempo.

Non esiste un modo integrato per farlo in Excel, ma puoi utilizzare una macro per eseguire l’animazione. Fondamentalmente, la macro dovrebbe scoprire cosa c’è nella cella B7 e quindi utilizzare un ciclo For…Next per scorrere i valori tra 0 e qualunque cosa ci sia in B7. Durante ogni iterazione del ciclo, il valore in E4 verrebbe modificato, introducendo una sorta di ritardo.

La parte della macro che gestisce il ritardo è ciò che effettivamente fornisce la possibilità di variare il modo in cui la macro esegue il proprio lavoro. Il ritardo è necessario affinché l’animazione sembri funzionare; senza di esso, i numeri in E4 aumenterebbero troppo rapidamente. Excel fornisce un paio di modi pratici per implementare il ritardo. Ad esempio, questo esempio di 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 ' millisecondi
    
    If Target.Address = cellWatch Then
        Application.EnableEvents = False
        Range(cellCount).Show
        If IsNumeric(Target) Then
            For n = 0 To Target ' saltato se Target < 0
                Range(cellCount) = n
                Sleep msec ' ritarda ogni incremento
            Next n
        End If
        Range(cellCount) = Target
        Application.EnableEvents = True
    End If
End Sub

 

 

Questo codice dovrebbe essere aggiunto al modulo di codice del foglio di lavoro, poiché è progettato per essere eseguito ogni volta che qualcosa cambia nel foglio di lavoro. Puoi raggiungerlo facendo clic destro sulla scheda del foglio di lavoro e scegliendo “Visualizza codice”..

Il codice verifica se la cella modificata è la cella di destinazione (B7). Se lo è, allora prende il valore presente in quella cella e passa in un ciclo For…Next che aggiorna tutto ciò che è 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 che non si basi sul gestore di eventi Worksheet_Change, potresti prendere in considerazione 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 fa una pausa di un secondo intero tra ciascun aggiornamento della cella E4.

Ogni volta che usi una macro come questa che implementa una sorta di ritardo, ricorda che il tuo foglio di lavoro potrebbe sembrare meno reattivo. Ciò è dovuto al ritardo e all’entità del valore presente nella cella B7 (maggiore è il valore, maggiore è il ritardo totale).

 

 

Tags: , , , , , , , , , , , , , , , , ,

Ti è stato utile?