Frage von eckitz, 55

HeyHo Habe grad ne kleine krise mit excel...?

HeyHo Habe grad ne kleine krise mit excel... Die Zellen "C17:C19" sind leer , Die Zellen "D17:D19" sind mit zahlenwerten gefüllt! mittels der Funktion "=SVERWEIS("x";C17:C19;2)" wird ja in der ersten spalte nach dem x gesucht und dann der zahlenwert aus der D-Spalte der selben Zeile in eine weitere Zelle ("D20") geschrieben (der Text nur kurz als Einführung in mein Problem) Mein eigentliches Problem ist: Ich wollte ein Makro schreiben welches beim Klick in eine der 3 Zellen (C17:C19;(außer das x steht in der angeklickten Zelle)), die anderen beiden Zellen leert (beide zellen da ich nicht im makro nach dem x suchen will->so kurz wie möglich halten),damit ich das x nicht immer von hand löschen muss :)

Grüße im vorraus eckitz

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von Ninombre, Community-Experte für Excel, 31

Die Fragestellung trägt ganz gut zur Verwirrung bei. Der sverweis spielt anscheinend gar keine Rolle oder?

Was genau soll nun in der Zelle stehen die angeklickt wird? Das war bisher auch drin stand? Das wäre in etwa so:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim alterwert As String
If Not Intersect(Target, Range("c17:c19")) Is Nothing Then
alterwert = Target.Value
Range("C17:C19").Value = ""
Target.Value = alterwert
End If
End Sub

Kommentar von eckitz ,

klingt schon nicht schlecht aber!

ich will icht doppelklicken

und das ist eine datei für eine gewinnvergleichsrechnung basierend auf 3 verschiedenen stückzahlen (an material)

das x kreuzt sozusagen eine variante an

das makro soll: wenn ich zelle C17 anklicke und das x in eine der beiden anderen zellen ist beide anderen zellen (c18:c19) clearen und anschließend will ich von hand das x in die zelle eintragen 

->äquivalent für die zellen c18 und c19

DAFÜR BITTE ERSTMAL NE LÖSUNG

falls du zusätzlich noch was im petto hast wie das das x automatisch in die zelle einträgt wäre das zusätzlich ganz informativ...

ich habe das auch schon mit knöpfen programmiert aber das ist mir zu einfach gewesen-> wollte ich mich mal an diesem ansatz versuchen aber das schaff ich  nicht...

meine idee war:

Public Sub a()

If (Range("C17").Select And Range("C17").Value = " ") Then
  Range("C18").Value = ""
  Range("C19").Value = ""
  ElseIf (Range("C18").Select And Range("C18").Value = " ") Then
    Range("C17").Value = ""
    Range("C19").Value = ""
    ElseIf (Range("C19").Select And Range("C19").Value = " ") Then
      Range("C17").Value = ""
      Range("C18").Value = ""
    End If
  End If
End If

End Sub

habs so stumpf probiert da ich mich nicht so viel zu diesem .select/.click/...belesen hab

Kommentar von Ninombre ,

das kannst Du drehen und wenden wie Du willst, aber einen einfachen Mausklick kann man in Excel (mein Wissensstand) nicht als Ereignis abfangen, nur einen Doppelklick.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range("c17:c19")) Is Nothing Then
Range("c17:C19").Value = ""
Target.Value = "X"
End If
End Sub

Weil Du Dich ja auch recht deutlich ausdrückst, selbiges auch von meiner Seite:

- Warum (um Gottes willen) willst Du den Aufwand betreiben, ein Makro zu erstellen um nur 2 Felder zu leeren und dann das X doch manuell zu setzen? Das ist ein Aufriss für kaum Nutzen. Wenn, dann sollte doch alles im Makro passieren. Siehe oben -> Target ist die Zelle, die doppelgeklickt wird. Da kann man doch direkt das X reinschreiben lassen. Die drei Zellen kann man alle erstmal auf leer setzen und dann in die eine ausgewählte das X.
Bei deinem Entwurf fragst Du die Werte der drei Felder ab, was auch zum Ergebnis führt - aber eigentlich ist es ja egal, was in den anderen Zellen steht: Erstmal alles leeren und die aktive Zelle mit X bestücken. Das reduziert die Abfrage deutlich.

Kurze Erläuterung: worksheet_beforedoubleclick löst eben beim doppelklick aus. Da nur was passieren soll, wenn der Klick in C17:19 ist, wird dies zunächst abgefragt.

- Wenn Du keinen Button willst (was Sinn macht, denn beim Button ist nicht zu ermitteln, welche Zelle angeklickt wurde), dann musst Du irgendein Ereignis abfangen - passenderweise halt der Doppelklick.

Ganz ehrlich aber: Die wohl einfachere Lösung geht ohne Makro: Statt ein X in eine von drei Zellen zu setzen, könntest Du eine Zelle mit einem Dropdown (Datengültigkeitsprüfung > Liste) versehen. Dort steht dann auch per Mausklick die Auswahl drin.
Variante 1, Variante 2, Variante 3 oder was auch immer Du verwenden willst.

Die Umsetzung der ausgewählten Variante in eine Zahl kann man bspw. so machen:
=VERWEIS(C16;{"Variante 1";"Variante 2";"Variante 3"};{40;50;100})

C16 wäre hier das Feld mit Dropdown. Wenn Du die zugeordneten Werte nicht in der Formel hinterlegen willst, kann man die auch in die Tabelle schreiben. Dann kannst Du mit der Sverweis wie bisher arbeiten. Nur statt "x" suchst Du eben nach dem Wert des Dropdown

=sverweis(c16;c17:d19;0)

Kommentar von eckitz ,

Ich danke dir vielmals Kamerad!!

Hast mein Problem wohl so gut es geht gelöst...

Aber mich wunderts das garnichts mit dem Range("...").Select geht?? dafür würde ja ein einfacher klick reichen oder kann man da was machen?

Kommentar von eckitz ,

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$C$17" Then
Call a
Range("C17").Value = "x"
ElseIf Target.Address = "$C$18" Then
Call a
Range("C18").Value = "x"
ElseIf Target.Address = "$C$19" Then
Call a
Range("C19").Value = "x"
End If
End Sub

Public Sub a()
Range("c17:c19").Value = ""
End Sub

ok...habe jetzt noch ein bissel rumprobiert und mit dem makro das ganze mit nur einem klick realisiert (geht also doch ohne doppelklick :D)

Kommentar von Ninombre ,

ok, wenn das so klappt und deinen Bedarf erfüllt. Das Selection_Change hat aber nichts mit der Maus zu tun, es reicht wenn die Zelle ausgewählt wird, also auch mit den Pfeiltasten.

was ich trotzdem nicht verstehe, warum Du doch eine umständliche Abfrage der einzelnen Inhalte machst. Das Makro, das ich zuvor beschrieben habe, geht in gleicherweise auch mit selection_change:

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
If Not Intersect(Target, Range("c17:c19")) Is Nothing Then 'das stellt sicher, dass nur etwas passiert, wenn C17:C19 ausgewählt wurden
Range("c17:C19").Value = ""
Target.Value = "X"
End If
End Sub
Kommentar von eckitz ,

ich bin nicht so extrem bewandert in Excel...deswegen würde ich gern mal fragen was das

Not Intersect(...) Is Nothing

macht!?

Kommentar von Ninombre ,

Die Syntax ist natürlich mühsam

Kurz gesagt: Target ist die ausgewählte Zelle
mit dem not intersect.... wird geprüft, ob die ausgewählte Zelle im Bereich C17:C19 liegt

Antwort
von Rubezahl2000, 37

Ich versteh zwar nicht wirklich, was dein Problem ist, aber auf jeden Fall ist die sverweis-Formel nicht ok. Als Suchbereich gibst du nur 1 Spalte: C17:C19, aber dann folgt in der Formel eine 2, das heißt, er soll den Wert aus Spalte D nehmen. Spalte D ist aber nicht im Suchbereich enthalten.

Besser wäre: =SVERWEIS("x";C17:D19;2)
(und am Ende der Formel am Besten noch wahr oder falsch)

Ob das dann dein Problem löst, weiß ich nicht, aber die Syntax der Formel wäre dann zumindest korrekt.

Kommentar von eckitz ,

nene das klappt...habe mich nur oben vertippt!

ich brauche das makro um das x da rauszulöschen!!

Keine passende Antwort gefunden?

Fragen Sie die Community