Hi,
hab mal wieder ne Excel-Frage für die Experten unter euch 
Also ich möchte in A1 einen Wert erscheinen lassen wenn in B1 bestimmte Werte geschrieben werden. Aber ich möchte die Funktion dafür nicht in A1 schreiben, da sie dann beim überschreiben verschwindet.
Ich möchte also in C1 in etwa schreiben:
=WENN(ODER(B1=„a“;B1=„b“;B1=„c“);A1=„Wert“;A1="")
Ist sowas möglich?!
Gruß
Erwin
Hi,
hab mal wieder ne Excel-Frage für die Experten unter euch 
Also ich möchte in A1 einen Wert erscheinen lassen wenn in B1
bestimmte Werte geschrieben werden. Aber ich möchte die
Funktion dafür nicht in A1 schreiben, da sie dann beim
überschreiben verschwindet.
Ich möchte also in C1 in etwa schreiben:
=WENN(ODER(B1=„a“;B1=„b“;B1=„c“);A1=„Wert“;A1="")
Ist sowas möglich?!
Nö.
Das kriegt man noch nicht mal mit ´ner eigenen Tabellenfunktion hin (Makro-basiert). Da müsste man dann schon ein selbständiges Makro haben, das z.B. die Änderung in B1 überwacht und ggf. in A1 was ändert. Das ist kein Problem, aber eben u.U. doof, weil man nicht ohne Makros auskommt.
Kristian
Hallo Erwin,
ohne Makro: nein! Warum schützt Du A1 nicht gegen Überschreiben?
MfG Georg V.
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
=WENN(ODER(B1=„a“;B1=„b“;B1=„c“);A1=„Wert“;A1="")
Ist sowas möglich?!
Gruß Erwin
Hallo Erwin
Ich glaube auch nicht, dass man das mit einer Formel erledigen kann. Aber mit einem Makro ist es auch keine Hexerei. Neue Tabelle - mit ALT-F11 ins Visual Basic - dort nicht wie üblicherweise „Module“ wählen sondern „Objekte“ - dort das richtige Tabellenblatt mit Doppelklick öffnen und zum Beispiel folgendes reinkopieren:
Private Sub Worksheet_Change(ByVal Target As Range)
'On Error GoTo finis
If Target.Column > 2 Then Exit Sub
t = Cells(Target.Row, 2)
If IsEmpty(t) Then Exit Sub
Cells(Target.Row, 1) = t * 10
finis:
End Sub
Dieses Beispiel gibt in Spalte A das zehnfache der entsprechenden Zelle von Spalte B aus (= t * 10). Diese Formel wird Dir kaum jemand überschreiben
)
Leider kann die Spalte A nicht geschützt werden, sonst funktioniert dieses Change-Makro nicht. Man kann sie also überschreiben. Die Lösung wäre, den Schutz im gleichen Makro zu steuern. Nur weiss ich dazu im Augenblick keine vernünftige Lösung.
Grüsse und einen schönen Tag!
Niclaus
Da soll ggf. was hinein geschrieben werden können, wenn in B1 eben nich der Wert auftaucht.
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Anderes Beispiel
Private Sub Worksheet_Change(ByVal Target As Range)
'On Error GoTo finis
If Target.Column > 2 Then Exit Sub
t = Cells(Target.Row, 2)
If IsEmpty(t) Then Exit Sub
Cells(Target.Row, 1) = t * 10
finis:
End Sub
Ein Makro-Beispiel hatte ich mir erstmal geklemmt. Deine Variante ist allerdings ein bisschen ungeschickt. Deshlab hier nochmal eine Alternative (bitte in den VBA-Editor kopieren, damit es besser lesbar ist):
Private Sub Worksheet\_Change(ByVal Target As Range)
Const s\_ZielZelle As String = "A1" 'lässt sich leichter ändern, wenn man es als Konstante deklariert
'Target ist eine Range-Variable, die hier aber immer eine einzelne Zelle
'bezeichnet, keinen Bereich. Grund: Man kann immer nur den Wert einer
'einzigen Zelle ändern, nicht mehrere auf einmal. Und Target zeigt auf
'eben diese geänderte Zelle.
'Mit dem If-Then wird geprüft, ob die geänderte Zelle diejenige ist,
'die man überwachen will. In diesem Falle wird bei Änderungen, die
'nicht in Zelle B1 stattfinden, gar nichts gemacht.
'Sofern aber eine Änderung in B1 erfolgt, wird der neue Wert auf bestimmte
'Vorgaben getestet. Sollte eine davon passen, wird A1 entsprechend geändert.
'Dabei wird überigens diese Funktion noch einmal durchlaufen, doch es passiert
'nichts weiter, weil A1 nicht B1 ist (siehe zweiter Absatz). Das kann man leicht
'mit Hilfe eines Breakpoints nachprüfen (in die "If"-Zeile gehen und F9 drücken).
If Target.Address = "$B$1" Then
On Error Resume Next
Select Case Target.Value
Case ""
Range(s\_ZielZelle).Value = "leer"
Case "a"
Range(s\_ZielZelle).Value = "Affe"
Case "b"
Range(s\_ZielZelle).Value = "Büffel"
Case "c"
Range(s\_ZielZelle).Value = "Catze"
Case Else
Range(s\_ZielZelle).ClearContents
End Select 'Target.Value
On Error GoTo 0
End If 'Target.Address = "$B$1"
'Sollte man noch andere Zellen auf Veränderung überprüfen wollen,
'kann man natürlich auch das Target mittels Select-Case auslesen.
'Im auskommentierten Beispiel unten wird bei beliebigen Änderungen
'in C1, D1 und E1 eine jeweilige Aktion ausgeführt.
' Select Case Target.Address
' Case "$C$1"
' Target.Offset(0, 1).Value = "Kopie von " & Target.Value
' Case "$D$1"
' Target.Offset(0, 1).Value = "Toller Wert!"
' Case "$E$1"
' Range(s\_ZielZelle).Value = "Zebra"
' End Select 'Target.Address
End Sub 'Worksheet\_Change
Leider kann die Spalte A nicht geschützt werden, sonst
funktioniert dieses Change-Makro nicht. Man kann sie also
überschreiben. Die Lösung wäre, den Schutz im gleichen Makro
zu steuern. Nur weiss ich dazu im Augenblick keine vernünftige
Lösung.
Dabei ist die so einfach. Es gibt die Protect- und die Unprotect-Methode. Siehe Hilfe für Hilfe.
Kristian
Workaround als Formellösung
Also ich möchte in A1 einen Wert erscheinen lassen wenn in B1
bestimmte Werte geschrieben werden. Aber ich möchte die
Funktion dafür nicht in A1 schreiben, da sie dann beim
überschreiben verschwindet.
Ich möchte also in C1 in etwa schreiben:
=WENN(ODER(B1=„a“;B1=„b“;B1=„c“);A1=„Wert“;A1="")
Hi Erwin,
man kann es so aussehen lassen als wäre es möglich.
Du schreibst in Tabelle2!A1:
=WENN(ODER(Tabelle1!B1=„a“;Tabelle1!B1=„b“;Tabelle1!B1=„c“);„Wert“;"")
Dann kopierst du Tabelle2!A1 mit Strg+C, wechselst in Zelle Tabelle2!C1 , hälst die Shift-Taste gedrückt, Bearbeiten–Verknüpftes Bild einfügen.
Achja, vorher unter Exytras–Optionen Interationen auf 1 setzen.
Mittels bedingten Formatierungen kannst du jetzt ggfs. immer nur einen Wert in Tabelle2!C1 „anzeigen“ lassen.
Gruß
Reinhard
Danke schon mal euch allen, ich hoffe ich komme die Woche noch dazu die beste Lösung zu testen.
Nochmal dickes Danke für die Mühe 
Hallo Kristian
Vielen Dank für Deine Notizen. So lernt man von Tag zu Tag!!
Grüsse Niclaus