Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Wenn Zellinhalt gelöscht, dann bitte Formel

Wenn Zellinhalt gelöscht, dann bitte Formel
23.01.2018 15:19:56
Leo
Hallo ihr Lieben,
ich habe eine Tabelle aus der Formatvorlage (unter Reiter "Start" auf "Als Tabelle formatieren" klicken) erstellt.
Nun möchte ich folgendes:
Wann immer man den Inhalt einer Zelle löscht, soll dort bspw. folgende Formel erscheinen: =1+1
Und das soll für jede Zelle einer Spalte möglich sein (bemerke: man soll die Tabelle zeilenmäßig erweitern können und für die neuen Zeilen gelte die selbe Formel)
Ist soetwas Verrücktes mit VBA möglich?
Hajo hat gute Arbeit geleistet und diese Formel hierfür erstellt (diesen Code muss man beim Editor in die entsprechende Tabelle einfügen):
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 And Target = "" Then
Application.EnableEvents = False
Target.Formula = "=1+1"
Application.EnableEvents = True
End If
End Sub

Nun erfolgt ein Problem:
Wenn man eine weitere Zeile hinzufügen möchte, ertönt ein Fehler.
Siehe bitte bei meinem File-Upload die Bilder 1 bis 5.
https://www.herber.de/bbs/user/119193.jpg
https://www.herber.de/bbs/user/119194.jpg
https://www.herber.de/bbs/user/119195.jpg
https://www.herber.de/bbs/user/119196.jpg
https://www.herber.de/bbs/user/119197.jpg
Liebe Grüße
Leo
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Dann halt so hier:
23.01.2018 16:16:52
Willi
Hallo Leo,
dann so:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 And Target.Value = "" Then
Application.EnableEvents = False
Target.Formula = "=1+1"
Application.EnableEvents = True
End If
End Sub

Gruß Willi
AW: Dann halt so hier:
23.01.2018 16:44:31
Leo
Hallo Willi,
leider hat es das Problem nicht gelöst :(
Anzeige
upps ...
23.01.2018 16:45:39
Willi
besser so:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 And IsEmpty(Target.Value) Then
Application.EnableEvents = False
Target.Formula = "=1+1"
Application.EnableEvents = True
End If
End Sub

Gruß Willi
AW: upps ...
23.01.2018 17:07:17
Luschi
Hallo Willi,
schpn wieder nicht getestet: IsEmpty(Target.Value) ergibt immer 'False', egal wie groß der Zellbereich sein mag und damit
wird der If-Abfrage-Block immer übersrungen.
Aus der Excel-Online-Hilfe: IsEmpty gibt nur für Variant-Werte sinnvolle Informationen zurück.
Außerdem hat IsEmpty etwas mit der Initialisierung von Variablen zu tun, siehe:
https://msdn.microsoft.com/de-de/VBA/Language-Reference-VBA/articles/isempty-function
Gruß von Luschi
aus klein-Paris
Anzeige
immer 'False'?
23.01.2018 17:23:46
Willi
Hallo Luschi,
immer 'False' - dem würde ich jetzt widersprechen wollen.
Gibt 'True' zurück, wenn wie von Leo gewünscht 'eine Zelle'(sic) geändert wird.
Und dann wird die Formel in das eine Feld geschrieben.
Gruß Willi
AW: Dann halt so hier:
23.01.2018 16:52:53
Luschi
Hallo Willi,
hättest Du Deinen Vorschlag getestet, dann wäre Dir aufgefallen, daß genau der selbe Fehler auftritt.
Man kann zwar mit 'Target.Value = ""' oder auch 'Target = ""' alle Zellen im Target-Bereich gleichzeitig leeren, aber niemals so in einer Abfrage prüfen, ob alle Zelle im Target-Bereich leer sind; man sollte/muß 2 Fälle dabei ausschließen:
- neue Spalte 'B' einfügen
- neue Zeile (egal wo!)
Hier mal mein Lösungsversuch:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim ok As Boolean
If Target.Column = 2 Then
ok = Application.WorksheetFunction.CountBlank(Target) = Target.Count And _
Target.Count 
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Wenn Zellinhalt gelöscht, dann bitte Formel
23.01.2018 16:45:28
Daniel
HI
könntest du bei einer berechneten Tabelle auch so lösen:
in der ersten Spalte steht die Formel bzw der Wert der angewendet werden soll, wenn die Haupteingabespalte (2. spalte) leer ist
in der zweiten Spalte macht der Anwender seine Eingaben
in der drittenspalte steht sinngemäß folgende Formel:
=Wenn(Spalte2="";Spalte1; Spalte2)
zum rechnen bzw für Auswertungen nimmst du dann die 3. Spalte.
erste und dritte Spalte kannst du ausblenden
Wenn bei leerer zweiter Spalten der Wert aus der ersten innerhalb der 2. Spalte angezeigt werden soll, dann geht das auch mit diesem Trick:
- die Spaltenbreite der ersten Spalte wird so klein wie möglich, aber größer 0 gezogen (1 oder 2 Pixel)
- Wenn jetzt die zweite Spalte leer ist, wird der Inhalt aus der ersten Spalte in der zweiten Spalte weitergeschrieben, ist die zweite Spalte befülllt, sieht man nur den Inhalt der zweiten Spalte.
Funktioniert aber nur, wenn in der ersten Spalte Text steht.
dh wenn man hier mit Zahlen arbeiten will, müsste man diese in der ersten Spalte als Text erstellen:
=Text(1+1;"0")
und in der dritten Spalte diesen text dann in einen Zahlenwert wandeln:
=Wenn(Spalte2 = ""; Wert(Spalte1); Spalte2)
da du dich in einer Intelligenten Tabelle befindest, werden diese Formeln automatisch erweitert wenn du Zeilen hinzufügst.
Code braucht man keinen, nur zwei zusätzliche Spalten.
Gruß Daniel
Anzeige
Als Makro so:
23.01.2018 17:35:32
Daniel
hier mit bezug auf deine Tabelle, damit sich die Bezüge auch automatisch anpassen.
Tabellen- und Spaltenname ggf anpassen.
Die Fallunterscheidung mit der Anzahl der leeren Zellen im Bereich musste ich machen, weil das SpecialCells den Zellbereich automatisch erweitert, wenn man nur eine Zelle als Quelle angibt, und dann werden ggf. Zellen außerhalb des gewünschten Bereichs mit der Formel gefüllt.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Zelle As Range
With Range("Tabelle1[Spalte1]")
If Not Intersect(Target, .Cells) Is Nothing Then
Application.EnableEvents = False
Select Case WorksheetFunction.CountBlank(Intersect(Target, .Cells))
Case 0
Case 1
For Each Zelle In Intersect(Target, .Cells)
If Zelle.Formula = "" Then Zelle.Formula = "=1+1"
Next
Case Else
Intersect(Target, .Cells).SpecialCells(xlCellTypeBlanks).Formula = "=1+1"
End Select
Application.EnableEvents = True
End If
End With
End Sub
Gruß Daniel
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Zellinhalt löschen und automatisch mit einer Formel auffüllen


Schritt-für-Schritt-Anleitung

  1. Öffne die Excel-Datei und gehe zu dem Arbeitsblatt, in dem du die Funktion implementieren möchtest.

  2. Öffne den VBA-Editor:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  3. Füge den VBA-Code ein:

    • Wähle im Projektfenster das entsprechende Blatt aus.
    • Füge den folgenden Code in das Codefenster ein:
    Private Sub Worksheet_Change(ByVal Target As Range)
       If Target.Column = 2 And Target.Value = "" Then
           Application.EnableEvents = False
           Target.Formula = "=1+1"
           Application.EnableEvents = True
       End If
    End Sub
  4. Schließe den VBA-Editor und kehre zu Excel zurück.

  5. Teste die Funktion:

    • Lösche den Inhalt einer Zelle in der zweiten Spalte. Die Formel =1+1 sollte automatisch erscheinen.

Häufige Fehler und Lösungen

  • Fehler bei der Zeilenhinzufügung: Wenn beim Hinzufügen einer Zeile ein Fehler auftritt, kann es daran liegen, dass der VBA-Code nicht richtig auf den gesamten Zellbereich reagiert. Stelle sicher, dass du den Code an den richtigen Ort eingefügt hast und dass der Zellbereich korrekt definiert ist.

  • Formel wird nicht angezeigt: Wenn die Formel nicht angezeigt wird, überprüfe, ob die Bedingung Target.Column = 2 korrekt ist und ob du in der richtigen Spalte arbeitest.


Alternative Methoden

Eine alternative Möglichkeit, um sicherzustellen, dass bei leeren Zellen eine Formel angezeigt wird, ist die Verwendung von Excel-Formeln anstelle von VBA:

  1. Erstelle in der ersten Spalte die Formel, die du verwenden möchtest.
  2. In der zweiten Spalte gib die Eingabewerte ein.
  3. In der dritten Spalte kannst du eine Formel wie folgt verwenden:

    =WENN(B2="";A2;B2)

Diese Formel zeigt den Wert aus der ersten Spalte an, wenn die zweite Spalte leer ist.


Praktische Beispiele

Angenommen, du hast eine Tabelle mit den Spalten „Wert“ (A), „Eingabe“ (B) und „Ausgabe“ (C). Wenn du in Spalte B einen Wert löschst, soll in Spalte C automatisch die Formel =1+1 erscheinen.

Du kannst die Schritte der Schritt-für-Schritt-Anleitung befolgen, um dies zu implementieren. Teste es, indem du in Spalte B einen Wert eingibst und dann den Zellinhalt löscht.


Tipps für Profis

  • Verwende Application.EnableEvents = False: Dies verhindert, dass der Code erneut ausgelöst wird, während du die Formel in die Zelle schreibst.
  • Benutze benannte Bereiche: Wenn du den Code auf mehrere Blätter anwenden möchtest, könntest du benannte Bereiche verwenden, um den Code flexibler zu gestalten.
  • Automatisches Erweitern: Wenn du eine Tabelle verwendest, werden die Formeln automatisch auf neue Zeilen ausgeweitet. Dies ist besonders nützlich, wenn du regelmäßig neue Daten hinzufügst.

FAQ: Häufige Fragen

1. Wie kann ich den VBA-Code anpassen, um unterschiedliche Formeln zu verwenden? Du kannst die Zeile Target.Formula = "=1+1" ändern und jede gewünschte Formel einsetzen.

2. Funktioniert diese Methode in allen Excel-Versionen? Die beschriebenen Methoden sollten in den meisten modernen Excel-Versionen funktionieren, jedoch ist VBA erst ab Excel 2000 vollständig unterstützt.

3. Was passiert, wenn ich eine ganze Zeile oder Spalte lösche? Der aktuelle Code könnte nicht richtig reagieren, wenn du eine gesamte Zeile oder Spalte löschst. Du müsstest den Code erweitern, um diese Fälle zu berücksichtigen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige