Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Wenn A1 = "x" dann B1 ="" und umgekehrt

Forumthread: Wenn A1 = "x" dann B1 ="" und umgekehrt

Wenn A1 = "x" dann B1 ="" und umgekehrt
04.11.2015 07:42:40
Andreas
Guten Morgen,
ich bin neu hier, die Suchfunktion bringt mich nicht wirklich weiter, daher hoffe ich auf keine Standpauke :-)
Es klingt wahrscheinlich sehr banal.
Folgendes Problem:
Das ganze ist eine Art Fragenkatalog, in dem man nur mit Ja oder Nein antworten kann. Und zwar in der Form, dass der Anwender entweder in Spalte JA ein "x" einträgt oder in Spalte NEIN ein "x" einträgt.
Ich habe insegesamt 44 Zeilen in 2 Spalten.
Wie kann ich jetzt verhindern das in beiden Spalten ein "x" eingetragen wird.
Meine Idee war:
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("F7").Value = "x" Then
Range("G7").Value = ""
End If
Und das für jede Zelle. Erstens geh ich davon aus, dass das einfacherer zu realisieren ist und zweitens funktioniert das auch so gar nicht weil ich in eine Endlosschleife komme. (Was logisch ist)
Für einen Lösungshinweis wäre ich dankbar
MfG

Anzeige

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
die Idee ist gar nicht so doof....
04.11.2015 08:00:37
MCO
Moin!
Nimm mal diesen code:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Value = "x" Then
Application.EnableEvents = False
Target.Offset(0, 1 - IIf(Target.Column = 7, 2, 0)).ClearContents
Application.EnableEvents = True
End If
End Sub
Der wohl wichtigste Unterschied ist die Abschaltung des auslösenden Ereignisses, bevor du die Nebenstehende Zelle änderst. Daher die Schleife.
Außerdem wird mit "target" schon auf die eben geänderte Zelle Bezug genommen, daher fehlen jetzt feste Zellbezüge. Fast jedenfalls.
Um die Zelle rechts bzw. links von "target" zu löschen muß geprüft werden ob gerade in Spalte (links) oder Spalte (rechts) gearbeitet wird. Das passiert mit target.column = 7.
Bei 7 wird offset(0,1-2) also auf die Zelle links neben target verweisen, ansonsten mit offset(0,1-0) auf die Zelle rechts neben target.
Ich hoffe, das bring dich weiter.
Gruß, MCO

Anzeige
AW: die Idee ist gar nicht so doof....
04.11.2015 08:43:49
Andreas
Vielen Dank für die rasche Antwort.
Funktioniert grundsätzlich super, auch wenn mir der code nicht ganz einleuchtet. Woher weiß Excel in welcher Spalte ich mich gerade befinde?
Die Zahlenfolge nach offset versteh ich auch nicht richtig :-)
Nun gibt es folgendes Problem:
Nach den ersten 4 Zeilen Ja oder Nein Abfrage kommt eine (verbundene) Zelle, die eine Ergebnisprüfung der obigen 4 Zeilen enthält.
Wenn in diese gesprungen wird hält die Prozedur an, auch wenn ich das Blatt schütze und die Zelle übersprungen wird.
Habe einen Screeshot angehangen
Userbild

Anzeige
AW: Mit Doppelklick.
04.11.2015 08:58:39
hary
Moin
Hier mal mit Doppelklick(einfacher) in Zelle. X wird automatisch eingetragen.
Bei verbunden Zellen nix.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range("F7:G51")) Is Nothing Then
Cancel = True
If Target.MergeCells Then Exit Sub'--wenn Verbund dann beenden
Cells(Target.Row, 6).Resize(1, 2).ClearContents'--Inhalte loeschen
Target = "X" '--X setzen
End If
End Sub

gruss hary

Anzeige
AW: die Idee ist gar nicht so doof....
04.11.2015 09:32:32
Andreas
@hary
auch erstmal Danke. Nach einfügen deines Codes tut sich leider nix.
Dieser hier funktioniert bis zur der Verbundenen Zelle. Habe auch grade gemerkt das nicht nur die Ergebniszelle verbunden ist, sondern auch diverse Zellen in denen Ja oder Nein angeXt werden sollen.
Kann ich das mit dem Code hier relaisieren, dass er die verbundenen Zellen auch behandelt wie eine Normale?
  Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Value = "x" Then
Application.EnableEvents = False
Target.Offset(0, 1 - IIf(Target.Column = 7, 2, 0)).ClearContents
Application.EnableEvents = True
End If
End Sub

Anzeige
AW: Bsp.-Mappe
04.11.2015 10:39:04
hary
Moin
Lad eine Bsp.-Mappe hoch.
gruss hary

AW: Bsp.-Mappe
04.11.2015 11:40:22
hary
Moin
Code in den Code vom Blatt "Checkliste". Startet bei Doppelklick.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range("F7:G51")) Is Nothing Then
Cancel = True
If Target.Columns.Count  1 Then Exit Sub '--wenn Verbundspaltenanzahl  1 dann beenden
Cells(Target.Row, 6).Resize(Target.Rows.Count, 2).ClearContents
Target = "X" '--X setzen
End If
End Sub

solltest du im Blatt "AS nicht Eigentümer der Fläche" auch die Spalten F ung G nutzen koenntest du auch
den Code ins Workbook setzen.
Workbook_SheetBeforeDoubleClick
gruss hary

Anzeige
AW: Bsp.-Mappe
04.11.2015 11:55:39
Andreas
Klasse, das funktioniert! Vielen Dank dafür
Die Zelle jetzt für eine Eingabe sperren, aber das Doppelklicken erlauben geht wahrscheinlich nicht?

AW: Bsp.-Mappe
04.11.2015 12:42:09
hary
Moin
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range("F7:G51")) Is Nothing Then
Cancel = True
If Target.Columns.Count  1 Then Exit Sub '--wenn Verbundspaltenanzahl  1 dann beenden
Cells(Target.Row, 6).Resize(Target.Rows.Count, 2).ClearContents
Target = "X" '--X setzen
End If
ActiveSheet.Protect Password:="passwort", UserInterfaceOnly:=True
End Sub

Nimm fuer die Datenueberpruefung die Formel Bsp.: =F25:G25=""
gruss hary

Anzeige
AW: Bsp.-Mappe
04.11.2015 12:53:51
Andreas
Haut nicht ganz hin.
Doppelklick in F7. X wird eingetragen, Blatt wird geschützt. Danach passiert durch Doppelklicken auf andere Zellen nichts mehr.
Müssen die Zellen unter /formatieren/Schutz den Haken bei gesperrt haben oder nicht?

AW: Schutz
04.11.2015 15:14:10
hary
Moin
Bei den Zellen wo der Doppelklick wirken soll, kein Haken.
gruss hary

Anzeige
AW: Schutz
04.11.2015 15:29:28
Andreas
Auch auf den Verdacht hin, dass ich nerve.
Die Zellen in denen der Doppelklick wirken soll haben keine Haken bei gesperrt.
Das Blatt ist vor dem ersten Doppelklick ungeschützt:
Mit Doppelklick in F7 wird das Blatt geschützt. Aber ich kann danach trotzdem noch in die Zelle schreiben

Anzeige
AW: Schutz
04.11.2015 16:37:51
hary
Moin
Nerven,nein.
Hab mal fuer die Datenueberpruefung eine neue Formel genommen. Es sind noch nicht alle geaendert.
https://www.herber.de/bbs/user/101251.xlsm
Falls das nicht reicht, ueberleg ich mir noch was. Geht aber erst Morgen.
gruss hary

Anzeige
AW: Schutz
05.11.2015 07:45:46
Andreas
Moin,
funktioniert so weit gut, aber jetzt kann ich zwar kein "x" per hand in die Zelle eintragen, dafür jeden anderen Buchstaben. :-)

AW: Schutz
05.11.2015 10:02:25
hary
Moin
Hab mich verhauen, Datenueberpruefung muss lauten:
statt "" dieses =""
gruss hary

Läuft
05.11.2015 14:48:08
Andreas
Ich dreh durch. Das Klappt! Vielen Vielen Dank dafür

Anzeige
Noch eine Frage
06.11.2015 09:20:02
Andreas
Hast du die Mappe noch?
ein winziges Problem habe ich noch.
ich möchte folgendes überprüfen:
Wenn in D24 steht "Weiter mit Schritt 6" dann soll F25:G25 und F27:G28 gesperrt sein und eine MsgBox mit einem Hinweis erscheinen.
(Das mit der MsgBox bekomm ich hin)

AW: Nur ein X
04.11.2015 08:01:00
hary
Moin
Eine Moeglichkeit.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 Then
If Not Intersect(Target, Range("F7:G51")) Is Nothing Then
Application.EnableEvents = False '--Event ausschalten wegen Endlosschleife
Cells(Target.Row, 6).Resize(1, 2).ClearContents '--loescht beide Zellen
Target = "X" '--traegt X ein
End If
End If
Application.EnableEvents = True '--Event einschalten
End Sub

gruss hary
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

A1 = "x", B1 = "" und umgekehrt: So geht's in Excel


Schritt-für-Schritt-Anleitung

Um zu verhindern, dass in zwei Spalten gleichzeitig ein "x" eingetragen wird, kannst Du VBA (Visual Basic for Applications) verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Wähle im Projektfenster das Arbeitsblatt aus, in dem Du die Regel anwenden möchtest (z.B. "Tabelle1").

  3. Kopiere den folgenden Code in das Codefenster:

    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Count = 1 Then
            If Not Intersect(Target, Range("F7:G51")) Is Nothing Then
                Application.EnableEvents = False '--Event ausschalten wegen Endlosschleife
                Cells(Target.Row, 6).Resize(1, 2).ClearContents '--loescht beide Zellen
                Target = "X" '--trägt X ein
            End If
        End If
        Application.EnableEvents = True '--Event einschalten
    End Sub
  4. Schließe den VBA-Editor und teste die Eingabe in den Zellen F7 bis G51.


Häufige Fehler und Lösungen

Problem: Der Code funktioniert nicht, wenn in einer verbundenen Zelle ein "x" eingetragen wird.

Lösung: Stelle sicher, dass der Code auch für verbundene Zellen angepasst wird. Verwende dazu den folgenden Code:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Not Intersect(Target, Range("F7:G51")) Is Nothing Then
        Cancel = True
        If Target.MergeCells Then Exit Sub '--wenn Verbund dann beenden
        Cells(Target.Row, 6).Resize(1, 2).ClearContents '--Inhalte loeschen
        Target = "X" '--X setzen
    End If
End Sub

Dieser Code ermöglicht es Dir, durch Doppelklick in die Zellen ein "x" einzutragen, ohne dass eine Endlosschleife entsteht.


Alternative Methoden

Falls Du VBA nicht verwenden möchtest, kannst Du auch die Datenüberprüfung in Excel nutzen:

  1. Markiere die Zellen, in denen Du die Eingabe einschränken möchtest (z.B. F7:G51).
  2. Gehe zu Daten > Datenüberprüfung.
  3. Wähle Benutzerdefiniert aus und gib die Formel ein:

    =COUNTIF(F7:G51, "x") <= 1

Diese Methode verhindert, dass mehr als ein "x" in den Zellen eingetragen wird.


Praktische Beispiele

Hier sind einige praktische Beispiele, wie Du den Code anpassen kannst:

  • Um sicherzustellen, dass bei einer Eingabe in F7 die Zelle G7 geleert wird:

    If Target.Address = "$F$7" Then
        Range("G7").Value = ""
    End If
  • Um eine Meldung anzuzeigen, wenn der Benutzer ein "x" in beiden Spalten eingibt:

    If Application.WorksheetFunction.CountIf(Range("F7:G51"), "x") > 1 Then
        MsgBox "Bitte nur in einer Spalte 'x' eintragen."
    End If

Tipps für Profis

  • Nutze Application.EnableEvents = False, um Endlosschleifen zu vermeiden, wenn Du Zellen programmatisch änderst.
  • Du kannst den Code in das Workbook-Modul verschieben, um die Funktionalität auf alle Blätter anzuwenden.
  • Denke daran, das Arbeitsblatt zu schützen, um unerwünschte Änderungen zu verhindern, während Du die Doppelklick-Funktionalität beibehältst.

FAQ: Häufige Fragen

1. Wie kann ich verhindern, dass andere Buchstaben in die Zellen eingegeben werden?
Verwende die Datenüberprüfung mit einer benutzerdefinierten Formel, um die Eingaben auf "x" zu beschränken.

2. Was mache ich, wenn der Code nicht funktioniert?
Überprüfe die Zellbezüge und stelle sicher, dass Makros in Excel aktiviert sind. Du kannst auch die Excel-Version prüfen, da einige Funktionen möglicherweise nicht in älteren Versionen verfügbar sind.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige