1k Aufrufe
Gefragt in Tabellenkalkulation von tmpusr Einsteiger_in (25 Punkte)
Hallo allerseits,

ich habe 2 Spalten (in einer Excel 2003 Liste) auf die es ankommt:
Spalte C (Wert1) und Spalte D (Wert2).

Ich möchte gerne Folgendes erreichen:

Wenn ich in eine Zelle in Spalte C einen Wert1 eintrage, soll der
Inhalt der rechts daneben befindlichen Zelle in Spalte D - also Wert2
gelöscht werden.
Genauso umgekehrt. Bei Änderungen in Spalte D soll die links neben
der aktiven Zelle befindliche Zelle in Spalte C gelöscht werden.

Ich habe da zwar schon einen Ansatz - aber wahrscheinlich nicht der
Richtige. Der Makro-Code wird bei Änderungen (Worksheet_Change) im
Tabellenblatt ausgeführt:

---
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'Wird Spalte D gefüllt (oder geändert), wird im Feld (links neben der aktiven Zelle) in Spalte C der Wert gelöscht
If Target.Column = 4 Then
Target.Offset(0, -1).Value = ClearContents
'Hiermit wird wieder auf die ursprünglich bearbeitete Zelle in Spalte D (zurück)gesprungen
Target.Select
'Wird Spalte C gefüllt (oder geändert), wird im Feld (rechts neben der aktiven Zelle) in Spalte D der Wert gelöscht
ElseIf Target.Column = 3 Then
Target.Offset(0, 1).Value = ClearContents
Target.Select
End If
End Sub
---

Allerdings kommt es hierbei zu einer Kreuz-Endlosschleife, da ja
jeweils die gegenüberliegenden Werte (immer wieder) geändert werden.

Nutze ich nur einen Part davon, also z. B.

---
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'Wird Spalte C gefüllt (oder geändert), wird im Feld (rechts neben der aktiven Zelle) in Spalte D der Wert gelöscht
If Target.Column = 3 Then
Target.Offset(0, 1).Value = ClearContents
Target.Select
End If
End Sub
---

funktioniert es genau so wie ich es mir wünsche - allerdings
eben nur in eine Richtung und nicht in Beide.

Für Verbesserungsvorschläge oder bessere Ideen wäre ich sehr dankbar!

Liebe Grüße

Karl

2 Antworten

0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
Hallo Karl,


Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 Then
Application.EnableEvents = False
If Target.Column = 3 Then
Target.Offset(0, 1) = ""
ElseIf Target.Column = 4 Then
Target.Offset(0, -1) = ""
End If
Application.EnableEvents = True
End If
End Sub


Gruß Hajo
0 Punkte
Beantwortet von tmpusr Einsteiger_in (25 Punkte)
Hallo Hajo,

vielen abertausend Dank!!! So funktioniert es prächtig!

Ganz liebe Grüße

Karl
...