298 Aufrufe
Gefragt in Tabellenkalkulation von
Hallo Zusammen,

ich möchte eine Tabelle erstellen, wo 3 Zellen (ich nehme jetzt einfach mal A, B und C) nebeneinanderliegen und jeweils nur eine der 3 Zellen beschrieben werden kann. Wenn ich also in Zelle A etwas reinschreibe sollen die Zellen B und C leer sein bzw. selbstständig geleert werden. Wenn ich in C einen Wert eintrage, sollen die Zellen A und B geleert werden. Ist das ohne VBA oder generell überhaupt möglich?

Vielen Dank im Voraus

6 Antworten

0 Punkte
Beantwortet von beverly_ Experte (1.6k Punkte)
Hi,

mittels Gültigkeitsprüfung kannst du zwar festlegen, dass nur 1 der 3 Zellen beschrieben werden kann, jedoch nicht, dass du dann stattdessen gleich eine andere beschreiben kannst und die erste automatisch geleert wird - dazu musst du erst den Inhalt der bereits beschriebenen löschen, ehe du in eine andere etwas eintragen kannst. Wenn du es so realisieren willst, dass dies automatisch geht, dann musst du es per VBA realisieren.

Bis später, Karin
0 Punkte
Beantwortet von
Hallo

z.b.

VB Editor

Projektexplorer/Tabelle1

Private Sub worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
  If Target.Address = "$A$1" Then Union(Cells(1, 2), Cells(1, 3)) = ""
  If Target.Address = "$B$1" Then Union(Cells(1, 1), Cells(1, 3)) = ""
  If Target.Address = "$C$1" Then Union(Cells(1, 1), Cells(1, 2)) = ""
Application.EnableEvents = True
End Sub
0 Punkte
Beantwortet von beverly_ Experte (1.6k Punkte)

Hi,

gemeint ist wohl VBA Editor, denn Excel operiert nicht mit VB sondern VBA. Außerdem gibt es ein Problem wenn mehrere Zellen ausgewählt wurden.

Ich würde das wie folgt lösen:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim varInhalt As Variant
    If Not Intersect(Target, Range("A1:C1")) Is Nothing Then
        varInhalt = Target
        Application.EnableEvents = False
        Range("A1:C1").Clear
        Target.Cells(1) = varInhalt
        Application.EnableEvents = True
    End If
End Sub

Bis später, Karin

0 Punkte
Beantwortet von
Hallo

Eine Alternative wäre z.b. auch Select Case

Private Sub worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
 Select Case Not Intersect(Target, Range("A1:C1")) Is Nothing
  Case Target.Address = "$A$1"
   Union(Cells(1, 2), Cells(1, 3)) = ""
  Case Target.Address = "$B$1"
   Union(Cells(1, 1), Cells(1, 3)) = ""
  Case Target.Address = "$C$1"
   Union(Cells(1, 1), Cells(1, 2)) = ""
 End Select
Application.EnableEvents = True
End Sub
0 Punkte
Beantwortet von
Hallo

Eurer Fantasie sind keine Grenzen gesetzt!

Paralleler Index!

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A1:C1")) Is Nothing Then
      Application.EnableEvents = False
      Dim Ziel(2) As String
      Ziel(0) = "B1,C1"
      Ziel(1) = "A1,C1"
      Ziel(2) = "A1,B1"
      Range(Ziel(Target.Column - 1)) = ""
      Application.EnableEvents = True
    End If
End Sub
0 Punkte
Beantwortet von beverly_ Experte (1.6k Punkte)
Hi,

auf dein Beispiel mit SelectCase trifft nach wie vor die Bemerkung aus meinem vorhergehenden Beitrag zu, dass es ein Problem gibt wenn du mehrere Zellen auswählst und mit Strg+Enter die Eingabe abschließt - dann wird die Eingabe in ALLE ausgewählten Zellen übernommen.

Bis später, Karin
...