2048 in Excel spielen

Im Frühjahr 2014 wurde ein Computerspiel veröffentlicht, das sich im Nu viral verbreitete: 2048 vom italienischen Web-Entwickler Gabriele Cirulli. Es geht darum, auf einem quadratischen Spielbereich (4x4 Felder) Zahlen in 2er-Potenzen (2^1; 2^2; ... - also 2; 4; 8; 16; ...) zusammenzuführen und die Zahl 2048 (2^11) zu erreichen.

2048_Screenshot

Auf www.spreadsheet1.com wurde später eine Excel-Version dieses Spieles veröffentlicht. Die Datei (xl2048.xlsm) kannst Du hier direkt herunterladen. Es handelt sich dabei um ein .xlsm-File - es beinhaltet also ein Makro, damit das Spiel überhaupt aktiv und mit den Pfeiltasten gespielt werden kann. Um es zu spielen, musst Du also nach dem Öffnen der Datei das Makro zulassen. Im ersten Tabellenblatt hast Du eine Kurzanleitung, im zweiten Tabellenblatt befindet sich das Spielbrett - versteckt inmitten von fiktiven Finanzzahlen. Hier das wichtigste in Kürze aufgeführt:

  • Das Spielbrett befindet sich im Bereich "G8:J11".
  • Die Zelle "B4" (Balance sheet) dient als Startknopf - drücke 2x darauf und Du kannst anschliessend mit den Pfeiltasten die Zahlen auf dem Spielbrett entsprechend verschieben.
  • Bewegen und addieren sich Deine Zahlen (bspw. 2+2 = 4; 4+4 = 8), dann steigt auch Deine laufende Punktzahl im Feld "G15".
  • Klickst Du zwei Mal in die Zelle "B24" (Profit and loss) wird sich das Spiel zurücksetzen und Du kannst neu beginnen.
  • Deine übergreifende Highscore wird im Feld "G16" (Provisions") aufgeführt.
  • Falls Du mit der Maus in eine andere Zelle klickst, wird Dein Spiel pausiert und in Zelle "C2" wird "Audit" stehen. Klickst Du abermals zwei Mal auf "B4" - "Balance sheet", wird das Spiel fortgesetzt.

Viel Spass damit!

GoTo VBA-Befehl

Mittels dem VBA-Befehl "GoTo" kann in einen beliebigen Bereich des Codes gesprungen werden. Dieser Beitrag zeigt ein Beispiel auf, wie dies funktioniert.

An einer Stelle im Code erfolgt der Befehl "GoTo Zielbereich" und an einem beliebigen anderen Ort steht "Zielbereich:" gefolgt von den entsprechend auszuführenden Befehlen:

Sub MeinGoToMakro()
...
GoTo Zielbereich
...
Zielbereich:
Hier auszuführender Code
...
End Sub

Schauen wir uns ein konkretes Beispiel an: Angenommen das Programm soll zwei mögliche Prozeduren vornehmen - entweder die Befehle in Sektion1 oder diejenigen in Sektion2. Je nach dem, welcher Zelleninhalt in "B1" ist, soll Sektion1 oder Sektion2 ausgeführt werden. In diesem Fall wird das Programm einfach die entsprechende Sektion mit ".Select" auswählen. Meine Exceltabelle sieht wie folgt aus:

GoToSheet

Und der vollständige Code in VBA dazu lautet:

Sub GoToMacro()

If Range("B1") = 1 Then
Range("A5").Select
GoTo Ende
Else: GoTo Sektion2
End If

Sektion2:
Range("A9").Select

Ende:
End Sub

Es gibt zwei Aspekte, die ich genauer hervorheben möchte: Der Doppelpunkt hinter der jeweiligen Sektion ("Sektion2:" und "Ende:") ist zwingend notwendig. Zudem ist der Sprung zu eben diesem "Ende:" in unserem obigen Programm wichtig, damit die Befehle in Sektion2 im Falle von B1 = 1 gar nicht erst ausgeführt werden. Da ganze Teile im Code je nach Szenario übersprungen werden, wird die Ausführungszeit des Makros im Generellen beschleunigt.

Makro im Hintergrund abspielen (Application.ScreenUpdating)

Sobald ein Makro andere Tabellen öffnen und viele Befehle ausführen soll, eignet es sich, dieses im Hintergrund abzuspielen. Dadurch sieht der Benutzer nur das fertige Resultat, nicht jedoch die Einzelschritte im Schnelldurchlauf, was vorwiegend wie ein "Flackern" des Bildschirms aussieht. Um diese Hintergrundverarbeitung zu aktivieren, benötigt man lediglich zwei Codezeilen: Zu Beginn schaltet man die Sichtbarkeit aus [False], am Ende des Makros oder eines beliebigen Code-Abschnitts aktiviert man sie wieder [True]:

Sub MeinMakro()

Application.ScreenUpdating = False

...

...

Application.ScreenUpdating = True

End Sub

Dadurch, dass das Makro im Hintergrund verarbeitet wird und man die einzelnen Verarbeitungsschritte nicht sieht, ist das Programm grundsätzlich auch schneller fertig ausgeführt.