Excel: Nur eine von drei Zellen darf beschrieben werden - Wie?
Hallo zusammen,
ich möchte innerhalb einer Excel-Tabelle eine Formular für eine Berechnung erstellen. Man hat unter Anderem die Möglichkeit zwischen hoch, mittel und niedrig zu wählen und dementsprechend neben der Einteilung eine "1" einzugeben. Kann ich die Zellen irgendwie formatieren, sodass die Inhalte der beiden anderen Zellen automatisch gelöscht werden? Sprich wenn ich mich um entscheiden sollte, z.B. statt niedrig doch die "1" bei hoch eingebe, dass die "1" in der anderen Zelle automatisch gelöscht wird?
Leider etwas kompliziert ausgedrückt, aber ich hoffe, dass ihr wisst, was ich meine.
Danke vorab für eure Hilfe!
4 Antworten
Wirklich nicht einfach umschrieben von dir :-) Aber die gute alte Wenn, Dann, Sonst Funktion gepaart mit der ERSETZEN Funktion kann so einiges bewerkstelligen in Excel.
Damit kannst Du nur Vorrangsregeln schaffen, aber nicht die Eingabe selbst korrigieren.
Das Problem ist, dass die Zelle manuell gefüllt wird. Das würde bedeuten, dass ich eine Funktion dann ja mit einer "1" überschreiben würde.
Das kannst du mit VBA lösen. Wenn in Zeile 1 "Hoch" dargestellt wird, in Zeile 2 "Mittel" und in Zeile 3 "Niedrig":
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row >= 1 And Target.Row <= 3 Then
If Cells(1, Target.Column).Value + Cells(2, Target.Column).Value + Cells(3, Target.Column).Value > 1 Then
Target.Value = ""
End If
End If
End Sub
das löscht vermutlich den Neueintrag, nicht den alten?!
(Verhindert also grade das "Umentscheiden"?)
ist eine ungewöhnliche Anordnung, die Optionen untereinander anzuordnen, normalerweise macht man das pro Frage eine Zeile und darin drei Optionsspalten (B2, C2, D2)
Da ich eher an einen Beschreibungsfehler glaube, mein Makro für diese Anordnung (ich schätze nämlich, dass das der anderen AW nicht korrekt arbeitet):
Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B1:D99")) Is Nothing Then
Dim neueAdresse As String, Neueintrag As String
If Application.CountA(Range(Cells(Target.Row, 2), Cells(Target.Row, 4))) > 1 Then
neueAdresse = Target.Address: Neueintrag = Target.Value
Range(Cells(Target.Row, 2), Cells(Target.Row, 4)).Clear
Range(neueAdresse).Value = Neueintrag
End If
End If
End Sub
Egal, WAS man einträgt (Zahl 1, Zahl 15 oder x oder TEXT, der Ersteintrag wird gelöscht und jeder Neueintrag an der gewählten Stelle eingefügt.
Wenn Du das doch für die Anordnung brauchst, wie beschrieben, melde Dich nochmal, ich schreibs dann um, wenn Du es nicht selbst schaffst.
Das Makro gehört ins Modul des Worksheets, das sich öffnet, wenn Du ins Kontext-Menü des Blattnamens klickst und Code anzeigen wählst.
Füge es unterhalb evtl schon vorhandener Einträge ein (zB Option Explicit, ...), allerdings dürfen keine zwei Makros Sub Worksheet_Change(ByVal Target As Range) drin stehen.
Das Makro löscht auch Formate (zB spezielle Schrift). Willst du die erhalten, dann
anstatt .Clear
.ClearContents
Wenn die Antwortzellen doch untereinander stehen, folgende Veränderungen:
Range("A2:CV4")
. . .
... .Range(Cells(2, Target.column), Cells(4, Target.column)) ... letzteres in 2 Zeilen:, 1x innerhalb Count( ... )
und 1x vor .ClearContents
Viel Erfolg!
In der Grundfunktionalität (also via Formel) kannst Du mit der bedingten Formatierung Werte ausblenden oder schlicht alle drei Eingabefelder z. B. rot markieren, wenn die Summe mehr als 1 ergibt. Wenn Du die genannte Funktionalität 1:1 haben möchtest, wirst Du um VBA wohl nicht umher kommen.
Mir ist noch was eingefallen. Excel hat einen Dialog Gültigkeitsprüfung (unter Excel 2003 im Menü "Daten --> Gültigkeit..."). Dort kannst Du eine Prüfung anlegen, die verhindert, dass mehrere Werte eingebbar sind. (Als einfache, aber lückenhafte Varianten kann man z. B. prüfen, ob die Summe der drei Felder mehr als 1 ergibt)
Annahme: Die Werte können in B2:B4 eingegeben werden ...