Julie möchte einige Eingabezellen in einem Arbeitsblatt haben, die bei Eingabe eines Werts automatisch 20% zu den eingegebenen Werten hinzufügen.

Wenn beispielsweise jemand 200 in eine dieser Zellen eingibt, wird tatsächlich 240 eingegeben.

Es gibt eine Vielzahl von Möglichkeiten, wie Sie diese Aufgabe mithilfe von Makros angehen können.

Der beste Ansatz besteht darin, ein Makro zu erstellen, das automatisch ausgeführt wird, wenn eine Zelle im Arbeitsblatt geändert wird. Sie können dann überprüfen, ob die Änderung in einer der Eingabezellen vorgenommen wurde, und die Werte entsprechend anpassen.

Im folgenden Beispiel wird der eingegebene Wert geändert, wenn er in einer der drei Zellen erstellt wurde: A1, C3 oder B8.

Private Sub Worksheet_Change(ByVal Target As Range)

Dim rInput As Range     Dim rInt As Range     Dim rCell As Range

'change the input cell range as desired     Set rInput = Range("A1, C3, B8")



Set rInt = Intersect(Target, rInput)

If Not rInt Is Nothing Then         For Each rCell In rInt             If IsNumeric(rCell) Then                 With Application                     .EnableEvents = False                     rCell = rCell * 1.2                     .EnableEvents = True                 End With             End If         Next     End If End Sub

Denken Sie daran, dass dies ein Ereignishandler ist. Dies bedeutet, dass er (in diesem Fall) immer dann ausgelöst wird, wenn sich etwas im Arbeitsblatt ändert. Um dieses Makro zu verwenden, klicken Sie mit der rechten Maustaste auf die Registerkarte Arbeitsblatt und wählen Sie im daraufhin angezeigten Kontextmenü die Option Code anzeigen. Excel zeigt den VB-Editor an und Sie können dann den Worksheet_Change-Code hinzufügen.

Beachten Sie, dass der Schlüssel zum Herausfinden, ob die Änderung in einer der drei definierten Eingabezellen vorgenommen wurde, die Intersect-Funktion ist. Es wird geprüft, ob es einen Schnittpunkt zwischen dem Zielbereich (den geänderten Zellen, die den Worksheet_Change-Handler ausgelöst haben) und dem rInput-Bereich (Ihren Eingabezellen) gibt. Wenn dies der Fall ist, würde rInt die Zellen enthalten, die sich geschnitten haben.

Das Makro durchläuft dann diese Zellen und multipliziert diese Zellen mit 120%, wenn die Zellen numerische Werte enthalten. (Das Multiplizieren mit 120% entspricht dem Erhöhen des Werts um 20%.) Beachten Sie, dass die Eigenschaft .EnableEvents nach Abschluss der Multiplikation auf False gesetzt ist. Wenn diese Schutzmaßnahme nicht angewendet würde, würde jede Multiplikation diesen Ereignishandler erneut auslösen und Sie würden den Zellenwert wiederholt (und für immer) mit 120% multiplizieren.

Wenn Sie die Werte tatsächlich auf andere Weise verarbeiten möchten, z. B. auf eine bestimmte Anzahl von Dezimalstellen oder auf einen ganzzahligen Wert runden möchten, müssen Sie lediglich die einzelne Zeile ändern, die die Multiplikation tatsächlich durchführt.

Wenn sich Ihre Eingabezellen in einem zusammenhängenden Bereich befinden, besteht ein besserer Ansatz darin, diese Eingabezellen als benannten Bereich zu definieren und dann diesen benannten Bereich innerhalb des Makros zu verwenden, um den Schnittpunkt der geänderten Zellen zu bestimmen. Auf diese Weise müssen Sie das Makro nicht ändern, wenn oder wenn sich Ihre Gruppe von Eingabezellen ändert.

Um diesen Ansatz zu verwenden, nehmen wir an, dass Ihr Bereich von Eingabezellen B7: B19 ist. Wählen Sie diese Zellen aus und geben Sie im Namensfeld in der oberen linken Ecke des Zellenbereichs den Namen „plus20pct“ ein. Diese Aktion weist dem Bereich den Namen zu. Sie können diesen Namen dann im Makro verwenden.

Private Sub Worksheet_Change(ByVal Target As Range)

Dim rInt As Range     Dim rCell As Range

'change the input cell range as desired

Set rInt = Intersect(Target, Range("plus20pct"))

If Not rInt Is Nothing Then         For Each rCell In rInt             If IsNumeric(rCell) Then                 With Application                     .EnableEvents = False                     rCell = rCell * 1.2                     .EnableEvents = True                 End With             End If         Next     End If End Sub

Beachten Sie, dass die einzige Änderung darin besteht, wie der Schnittpunkt von Zellen bestimmt wird. Die Intersect-Funktion verwendet den Bereich „plus20pct“ als Parameter. Alles andere funktioniert wie bisher.

Nachdem Sie gesehen haben, wie dies mit Makros gemacht wird, bleibt die Frage, ob Sie es wirklich mit Makros machen sollten. Erstens sind den Möglichkeiten dieser Makros Grenzen gesetzt. Was ist zum Beispiel, wenn Ihr Benutzer ein Datum oder eine Uhrzeit in eine der Eingabezellen eingibt? Intern behandelt Excel Datums- und Uhrzeitangaben als Zahlen, was bedeutet, dass auch diese um 20% erhöht würden.

Zweitens müssen Sie überlegen, was mit Ihrem Arbeitsblatt passiert, wenn jemand die Arbeitsblattstruktur durch Hinzufügen oder Löschen von Zeilen oder Spalten ändert.

Die Makros verwenden entweder absolute Zellreferenzen (A1, C3 und B8) oder einen benannten Bereich (plus20pct). Während der benannte Bereich durch Hinzufügen oder Löschen von Zeilen oder Spalten angepasst werden kann, würden sich die absoluten Zellreferenzen nicht ändern. So könnten Sie am Ende die Makroprüfung (und Anpassung)

durchführen Zellen, die nicht mehr die erwarteten Dateneingabezellen sind.

Drittens nehmen wir an, dass jemand einen Wert (200) in eine Ihrer Eingabezellen eingibt. Es wird automatisch um 20% erhöht und auf 240 erhöht. Die Person sieht diese Änderung und fragt sich, was passiert ist. Sie wählt die Zelle aus und drückt F2, um mit der Bearbeitung der Zelle zu beginnen. Bevor sie die Änderung vornehmen, erinnern sie sich daran, dass „Oh, ja, es soll automatisch um 20% zunehmen.“ Sie drücken einfach die Eingabetaste, um den Wert 240 zu akzeptieren.

Excel sieht dies jedoch als Änderung an und erhöht die 240 um 20%, was zu 288 führt – nicht das, was Sie oder der Benutzer beabsichtigt haben.

Diese zweite Überlegung – Benutzerverwirrung – ist das größte potenzielle Problem bei der automatischen Änderung der Eingabe eines Benutzers in das Arbeitsblatt. Ein weniger verwirrender Ansatz wäre, einen genau definierten Eingabebereich für Ihre Arbeitsmappe zu haben. Der Benutzer fügt Zahlen in den Eingabebereich ein und diese Zahlen bleiben bei der Eingabe erhalten. Dann nehmen Sie in anderen Zellen oder in Ihren Formeln die Anpassung um 20% vor.

Dieser Entwurfsansatz (Ändern des Arbeitsblattentwurfs zur einfachen Dateneingabe) ist für den Benutzer möglicherweise weniger verwirrend als das automatische Ändern der in eine Arbeitsblattzelle eingegebenen Daten. Außerdem wird ein Risiko beseitigt, das mit jeder makrofähigen Arbeitsmappe verbunden ist. Der Benutzer kann die Arbeitsmappe laden, ohne Makros zu aktivieren, und so sicherstellen, dass die Zahlen nicht wie beabsichtigt angepasst werden.

_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 (12684) gilt für Microsoft Excel 2007, 2010, 2013, 2016, 2019 und Excel in Office 365.