Ray möchte, wenn möglich, einen Weg finden, einen „Count-up“ für einen Wert in einer Zelle zu animieren. Zum Beispiel könnte er in Zelle B7 einen Wert von 23 haben. Er möchte auf diesen Wert in Zelle E4 verweisen und die Zelle E4 von 0 bis 23 (0, 1, 2, 3 usw.) zählen lassen, wobei jede Zahl angezeigt wird im Gegenzug.

In Excel gibt es keine integrierte Möglichkeit, dies zu tun. Sie können jedoch ein Makro verwenden, um die Animation auszuführen. Grundsätzlich müsste das Makro herausfinden, was sich in Zelle B7 befindet, und dann eine For …​ Next-Schleife verwenden, um die Werte zwischen 0 und den Werten in B7 zu durchlaufen. Während jeder Iteration der Schleife wird der Wert in E4 geändert und eine Art Verzögerung eingeführt.

Der Verzögerungsteil des Makros bietet tatsächlich die Möglichkeit, die Funktionsweise des Makros zu variieren. Die Verzögerung ist erforderlich, damit die Animation funktioniert. ohne sie würden sich die Zahlen in E4 zu schnell erhöhen. Excel bietet einige praktische Möglichkeiten, um die Verzögerung zu implementieren. Dieses Beispiel des Makros basiert beispielsweise auf der Sleep-Funktion:

#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

Dieser Code sollte dem ThisWorksheet-Modul hinzugefügt werden, da er jedes Mal ausgeführt werden soll, wenn sich etwas im Arbeitsblatt ändert. Der Code prüft, ob es sich bei der zu ändernden Zelle um die Zielzelle handelt (B7). Wenn dies der Fall ist, wird der Wert dort erfasst und in eine For …​ Next-Schleife gesprungen, die alles aktualisiert, was sich in Zelle E4 befindet. Die Sleep-Funktion wird verwendet, um in diesem Fall 200 Millisekunden zwischen jeder Aktualisierung von E4 zu verzögern.

Wenn Sie ein Makro möchten, das kürzer ist und nicht auf dem Workshand_Change-Ereignishandler basiert, können Sie Folgendes berücksichtigen. Es verwendet die Wait-Methode, um in der For …​ Next-Schleife anzuhalten:

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

Diese Version des Makros hält zwischen jeder Aktualisierung von Zelle E4 eine volle Sekunde an.

Wenn Sie ein solches Makro verwenden, das eine Verzögerung implementiert, denken Sie daran, dass Ihr Arbeitsblatt möglicherweise weniger ansprechend erscheint. Dies liegt an dieser Verzögerung und wie groß der Wert auch sein mag, der sich in Zelle E4 befindet. (Je größer der Wert, desto länger die Gesamtverzögerung.)

_Hinweis: _

Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der ExcelTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.

ExcelTips ist Ihre Quelle für kostengünstige Microsoft Excel-Schulungen.

Dieser Tipp (13753) gilt für Microsoft Excel 2007, 2010, 2013, 2016, 2019 und Excel in Office 365.