Das automatische Drehfeld in Microsoft Excel

Trotz allem Komfort, den Microsoft Excel bietet, fehlt ein nützliches Feature: Ein Drehfeld am Zellrand, mit dem sich der Wert in der Zelle per Mausklick erhöhen oder verringern lässt. Das spart viel Zeit bei der Aktualisierung von Excel-Blättern mit großen Zahlenmengen, da sich die Werte alleine mit der Maus ändern lassen, ohne, dass Sie die Tastatur benutzen müssen. Ignatz Schels beschreibt, wie Sie diese Aktion auch ohne Programmierkenntnisse mit zwei kleinen Makros einfach umsetzen.

 

Das automatische Drehfeld in Microsoft Excel

Trotz allem Komfort, den Microsoft Excel bietet, fehlt ein nützliches Feature: Ein Drehfeld am Zellrand, mit dem sich der Wert in der Zelle per Mausklick erhöhen oder verringern lässt. Das spart viel Zeit bei der Aktualisierung von Excel-Blättern mit großen Zahlenmengen, da sich die Werte alleine mit der Maus ändern lassen, ohne, dass Sie die Tastatur benutzen müssen. Ignatz Schels beschreibt, wie Sie diese Aktion auch ohne Programmierkenntnisse mit zwei kleinen Makros einfach umsetzen.

 

Trotz allem Komfort, den Microsoft Excel bietet, fehlt ein nützliches Feature: Ein Drehfeld am Zellrand, mit dem sich der Wert in der Zelle per Mausklick erhöhen oder verringern lässt (Bild 1). Das spart viel Zeit bei der Aktualisierung von Excel-Blättern mit großen Zahlenmengen, da sich die Werte alleine mit der Maus ändern lassen, ohne die Tastatur benutzen zu müssen.

Mit zwei kleinen Makros lässt sich diese Aktion einfach umsetzen, Programmierkenntnisse sind dafür nicht erforderlich. Für das hier vorgestellte Beispiel reicht es aus, wenn Sie wie unten beschrieben den gelisteten Makrocode (siehe auch Datei "Makrocode.txt") an die entsprechende Stelle in der Arbeitsmappe kopieren.

Bild 1: Das Drehfeld erscheint automatisch, sobald eine Zelle mit Zahlenwert angeklickt wird.

Die einzige Einschränkung ist, dass Drehfelder nur ganze Zahlen im Zahlenbereich von 0 bis 30.000 schreiben können. Die Schrittweite, mit der sie den Inhalt der verknüpften Zelle erhöhen oder verringern, lässt sich in den Eigenschaften festlegen. (Mehr Informationen zu Formularelementen und Drehfeldern: Aus der Excel-Trickkiste. Fortgeschrittene Techniken für Projektleiter. Teil 1: Ein Projektplan mit Teamauswahl, Projekt Magazin 20/2010 und Teil 2: Portfolio-Auswahl mit dynamischen Diagrammen, Projekt Magazin 21/2010)

Funktionsweise des Makros

Die Funktionsweise des Makros ist verhältnismäßig einfach: "SelectionChange" heißt das Ereignis, das mit der Positionierung des Zellzeigers ausgelöst wird. Es wird so programmiert, dass jede markierte Zelle automatisch ihr Drehfeld am rechten Rand erhält. Der Trick dabei: Als Position des Drehfelds wird einfach die linke obere Ecke der nächsten Zelle verwendet. "Target" ist der Objektname der Zelle, "target.next" liefert die Informationen über die nächste Zelle.

Aber Vorsicht: Da das Drehfeld nur dann erscheinen soll, wenn die markierte Zelle einen Zahlenwert enthält, muss das Makro zuerst prüfen, ob der Zellinhalt numerisch ist. Außerdem darf der Zellzeiger nicht in der letzten Spalte des Tabellen-Blatts stehen, da das Drehfeld dann nicht in der Ecke des nächsten Felds angezeigt werden kann. Auch bei verbundenen Zellen oder einer Mehrfachauswahl gibt es Probleme. Und natürlich darf die Zelle keine Formel enthalten, denn das Drehfeld würde diese überschreiben. Alle diese Fälle prüft das Makro ab. Tritt einer der genannten Fälle auf, springt es ohne das Drehfeld anzuzeigen an das Ende ("no Show").

Listing 1 zeigt den Makrocode mit Kommentaren zu den einzelnen Anweisungen.

Listing 1: Makrocode, um ein automatisches Drehfeld zu erzeugen.
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rngCell, spB As Shape, spbBreite As Integer
' Schalter
If Range("IV1").Value = "no spB" Then GoTo noShow
' Wenn mehr als eine Zelle markiert ist,
' bei verbunden Zellen oder wenn die Zelle Text enthält
' oder wenn der Wert größer als 30.000 ist
If Target.Cells.Count > 1 _
  Or Not IsNumeric(Target.Value) _
  Or Target.Column = Target.End(xlToRight).Column _
  Or Target.HasFormula _
  Or Target.Value > 30000 Then GoTo noShow
 ' Breite des Drehfeldes festlegen
 spbBreite = 15
 ' Aufruf der Funktion zum Löschen des Drehfelds
 delShape
 rngCell = Target.Address
 ' Drehfeld anlegen, Name zuweisen und Adresse aus der Zelle holen
 Set spB = ActiveSheet.Shapes.AddFormControl _
  (xlSpinner, Target.Next.Left, Target.Next.Top, spbBreite, Target.Next.Height)
 With spB
  .Name = "spbDrehfeld"
  .ControlFormat.Value = Target.Value
  .ControlFormat.LinkedCell = Target.Address
 End With
 Exit Sub
noShow:
delShape
End Sub
Function delShape()
 ' Drehfeld wird gelöscht, falls vorhanden
 On Error Resume Next
 ActiveSheet.Shapes("spbDrehfeld").Delete
 On Error GoTo 0
 Application.ScreenUpdating = True
End Function

Die Anweisung "Option Explicit" in der ersten Zeile stellt sicher, dass alle benutzten Variablen mit DIM deklariert sind. Excel fügt Sie automatisch in neue Module ein, wenn unter Extras / Optionen die Option "Variablendeklaration erforderlich" gesetzt ist.

Ereignismakros, also Makros, die nicht bewusst durch den Anwender, sondern durch ein Ereignis angestoßen werden (in unserem Fall durch das Markieren einer Zelle), greifen in Prozesse wie "Kopieren" und "Einfügen" ein. Sie können kritisch sein, wenn die darin programmierten Anweisungen Daten eintragen oder das Tabellenlayout ändern. Setzen Sie im Makro aus diesem Grund immer einen Schalter, der die Aktionen bei Bedarf abschaltet. Ein Eintrag in eine freie Zelle fernab des Auswertungsbereichs genügt für diesen Zweck, wenn das Makro eine Anweisung enthält, die ermittelt, ob dieser Eintrag gesetzt ist.

Im Beispiel lautet die zugehörige Anweisung:

If Range("IV1").Value = "no spB" Then GoTo noShow

Bewertungen und Kommentare

Diese Funktion steht nur eingeloggten Nutzern zur Verfügung. Jetzt einloggen
1 Kommentare anzeigen & selbst mitreden!
Gesamt
Bewertungen 7
Kommentare 1

Alle Kommentare (1)

Karin
Neusser

Seit wann sind Mausklicks (inkl. exakter Positionierung auf dem kleinen "hoch" oder "runter"-Pfeil) schneller als Tastatureingaben?