Kann man in Excel bestimmte Zellen in einer Zeile leeren, wenn in einer Zelle in der selben Zeile ein "x" steht?

2 Antworten

Das geht mit VBA.

Du müsstest das Change-Event des Arbeitsblatts abfangen, schauen, ob die Änderung in Spalte E stattfand, ob die Änderung ein x ist und dann die Werte derselben Zeile löschen. Willst du das x gleich nach dem eintragen auch wieder löschen, musst du die Ereignisbehandlung kurzzeitig deaktivieren, um auszuschließen, dass das Ereignis sich nicht rekursiv selber auslöst. (Kann eigentlich in deinem Fall nicht passieren, aber hier würde ich 1000% auf Nummer sicher gehen.)

Ich verstehe allerdings nicht, wozu du so einen Aufwand betreiben willst. Markiere doch die drei Spalten, lösch sie mit der Taste Entf und gut ist. Das ist im Vergleich zum Eintragen eines x auch nicht deeer Aufwand.

Ein Makro ist mit Kanonen auf Spatzen geschossen.
Der Nachteil eines Makros ist immer, dass du die Mappe als xlsm speichern musst, bei der Ausführung die Sicherheit passend eingestellt ist und LibreOffice-Anwender in die Röhre gucken. Externe Bearbeiter des Blatts wundern sich, weshalb Werte gelöscht werden, wenn sie irgendwo etwas eintragen.


zotti96 
Beitragsersteller
 09.11.2017, 11:53

Danke schonmal! klingt sehr vielversprechend... Ich weiß das es mit ENTF wesentlich einfacher gehen würde. Mich hat nur interessiert ob das überhaupt möglich ist. Ich werde mich mit deinem Tipp im Hinterkopf mal hinsetzten und weiter probieren...

Dass das nur per VBA-Code geht, hat Suboptimierer (DH) schon erklärt und auch die Alternativen.
Da mich das interessierte habe ich mal den Code zusammengestrickt:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("E6:E155")) Is Nothing Then
On Error GoTo Errorhandler
If Target.Value = "x" Then
Application.EnableEvents = False
Range(Target.Offset(0, -3), Target).ClearContents
End If
End If
Errorhandler: Application.EnableEvents = True
End Sub

Der Code gehört ins Modul des Tabellenblattes.
Klappt es? Hilft Dir das?

Woher ich das weiß:Berufserfahrung – IT-Administrator (i.R.)

zotti96 
Beitragsersteller
 09.11.2017, 13:23

Wie muss das gesamte Modul dann aussehen, wenn das Tabellenblatt "ToDo-Liste" heißt?

Oubyi, UserMod Light  09.11.2017, 13:27
@zotti96

Der Name ist egal, der Code steht ja im Modul des Tabellenblattes und das ist der gesamte Code.

Klicke mit Rechts auf den Tabellenreiter (unten, wo z.B. Tabelle1 steht).
Dann "Code anzeigen"
In den VBA-Editor, der sich dann öffnet, kopierst Du den Code.

zotti96 
Beitragsersteller
 09.11.2017, 13:32
@Oubyi, UserMod Light

Sehr schön! Funktioniert problemlos.
Angenommen ich möchte jetzt noch ein Fenster öffnen lassen, auf dem ich mich entscheiden kann ob ich die Zellen wirklich löschen will, geht das auch?

Oubyi, UserMod Light  09.11.2017, 13:43
@zotti96

Teste mal:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("E6:E155")) Is Nothing Then
On Error GoTo Errorhandler
If Target.Value = "x" Then
Target.Select
If MsgBox("Werte wirklich löschen?", vbYesNo) = 6 Then
Application.EnableEvents = False
Range(Target.Offset(0, -3), Target).ClearContents
Else: Target.ClearContents
End If
End If
End If
Errorhandler: Application.EnableEvents = True
End Sub
zotti96 
Beitragsersteller
 09.11.2017, 14:25
@Oubyi, UserMod Light

Da sieht man halt wer Ahnung davon hat...Und wer nicht ;) 
Danke für deine Hilfe! 
Wenn ich mich an irgendwann mal an eine Access-Datenbank mit Rechnungsausdruck machen möchte, kommt bestimmt noch die ein oder andere Frage...