Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Inhalt einer Zelle in Abhängigkeit vorgeben





Frage

Hallo, wie kann ich erreichen, dass nach Eingabe eines Wertes in Zelle A1 in Zelle A2 automatisch ein bestimmter Wert vorgegeben wird (Beispiel: Inhalt Zelle A1 = 1 oder 2, dann A2 = "W" ansonsten A2 = "T")? Der Wert in Zelle A2 soll nachträglich noch änderbar sein. Eine =WENN Abfrage in Zelle A2 bringt zwar das gewünschte Ergebnis, da ich die Zelle aber nicht schützen kann, überschreibt eine manuelle Korrektur die WENN-Abfrage. Welche anderen Möglichkeiten gibt es für dieses Problem? Danke im voraus für die Hilfe Ullrich M.

Antwort 1 von meinTipp

Hallo Ullrich,
für ein Tabellenblatt markierst du unten den Reiter mit der rechten Maustaste --> Code anzeigen.
Dort folgende Routine eintragen

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Spalte As Integer
Spalte = Target.Column
If Spalte <> 1 Then Exit Sub
If Target.Value = "" Then Exit Sub
Select Case Target.Value
Case 1, 2
Cells(Target.Row, Spalte + 1).Value = "W"
Case 3
Cells(Target.Row, Spalte + 1).Value = "X"
Case Else
Cells(Target.Row, Spalte + 1).Value = "T"
End Select
End Sub

Wenn es für alle Tabellenblätter in der Arbeitmappe gelten soll, so erstelle folgende Routine in "Diese Arbeitsmappe" (gleicher Inhalt)
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

Gruß Rolf

Antwort 2 von nighty

hi all :-)

bitte zum anfang
Application.EnableEvents = False

und zum ende
Application.EnableEvents = True

es kommt ansonsten zu einen zirkelbezug

gruss nighty

Antwort 3 von meinTipp

Hallo nighty,

im Allgemeinen hast du natürlich Recht.

Der Event der hier durch z.B.
Cells(Target.Row, Spalte + 1).Value = "W"
ausgelöst wird hat aber keinen Zirkelbezug zur Folge, da er durch
If Spalte <> 1 Then Exit Sub
abgefangen wird.

Antwort 4 von nighty

hi all :-)

der zirkelbezug ist vorhanden und das modul wird bei einem aufruf dreimal durchlaufen

gruss nighty

leicht zu kontrollieren indem du folgendes machen koentest

einzufuegen in ein allgemeines modul
Public zaehler As Integer

Private Sub Worksheet_Change(ByVal Target As Range)
rem hier die globale var die um eins addiert wird bei jedem aufruf
zaehler = zaehler + 1
Dim Spalte As Integer
Spalte = Target.Column
If Spalte <> 1 Then Exit Sub
If Target.Value = "" Then Exit Sub
Select Case Target.Value
Case 1, 2
Cells(Target.Row, Spalte + 1).Value = "W"
Case 3
Cells(Target.Row, Spalte + 1).Value = "X"
Case Else
Cells(Target.Row, Spalte + 1).Value = "T"
End Select
End Sub

rem hier ein kleines makro um die globale var anschliessend abzufragen

Sub test()
Cells(1, 5) = zaehler
End Sub

Antwort 5 von meinTipp

Das streite ich ja in keiner Weise ab.

Die 3. Ausführung entsteht natürlich durch Ausführen des Testmacros (Änderung in Spalte 5) selber.

Sub Worksheet_Change(ByVal Target As Range) wird natürlich bei jeder Änderung in dem Arbeitsblatt ausgeführt.

Dabei bleibt abzuwägen, ob ein zusätzlicher Durchlauf durch die Änderung im Macro selber durch die einmalige Beendigung durch ein "exit sub" oder bei jedem Durchlauf (bei jeder Zelle im Arbeitsblatt) das Kommandopaar
Application.EnableEvents = False
Application.EnableEvents = True
ausgeführt wird.

Ich finde das ist Ansichtssache. Vom Gefühl her ist das Ein - und Ausschalten des Eventhandlers bei jeder Aktion auf dem Arbeitsblatt Zeitaufwendiger.

Antwort 6 von ullrichm

Hallo Rolf,
zunächst einmal Danke für Deinen Vorschlag zur Lösung meines Problems. Ich habe vergessen zu sagen, dass das Arbeitsblatt Überschriften enthält.
Bei Deiner Lösung gehst Du davon aus, dass, die Spalte A nur Daten enthält, korrekt? Die Daten beginnen erst ab Zeile 5.
Ich habe mit VBA keinerlei Erfahrung und kann deshalb nur ungefähr nachvollziehen,
was der Code bewirkt.
Wodurch wird der VBA-Code zur Ausführung gebracht? Entschuldige bitte die Frage,
wie gesagt, VBA ist für mich Neuland!

Gruss
Ullrich

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: