automatisches Vorbelegen von Feldern nach auswahl aus einem Dropdown-Menü
Hallo Excel-Experten,
kann ich mit Excel ein definiertes Dropdown-Menü erstellen. Nach der Auswahl sollen dann verschieden Werte in Spalten geschrieben werden.
Beispiel:
Spalte A Auwahliste:
Bestellnummer 100
Bestellnummer 101
Bestellnummer 102
Danach soll Spalte B bei Auswahl Bestellnummer 100 z.B -15- anzeigen, sowie andere Werte in Spalte C und D
Danach soll Spalte B bei Auswahl Bestellnummer 101 z.B -222- anzeigen
Danach soll Spalte B bei Auswahl Bestellnummer 102 z.B -456- anzeigen
Dank Euch im Voraus, und noch ein erholsames Weihnachten
Gruß Alex
kann ich mit Excel ein definiertes Dropdown-Menü erstellen. Nach der Auswahl sollen dann verschieden Werte in Spalten geschrieben werden.
Beispiel:
Spalte A Auwahliste:
Bestellnummer 100
Bestellnummer 101
Bestellnummer 102
Danach soll Spalte B bei Auswahl Bestellnummer 100 z.B -15- anzeigen, sowie andere Werte in Spalte C und D
Danach soll Spalte B bei Auswahl Bestellnummer 101 z.B -222- anzeigen
Danach soll Spalte B bei Auswahl Bestellnummer 102 z.B -456- anzeigen
Dank Euch im Voraus, und noch ein erholsames Weihnachten
Gruß Alex
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 47394
Url: https://administrator.de/forum/automatisches-vorbelegen-von-feldern-nach-auswahl-aus-einem-dropdown-menue-47394.html
Ausgedruckt am: 06.04.2025 um 16:04 Uhr
13 Kommentare
Neuester Kommentar
Jetzt mal ohne zu Testen müßte das ungefär so aussehen :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range(Target.Address).Column = Range("A:A").Column Then
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="Bestellnummer 100,Bestellnummer 101,Bestellnummer 102"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End If
Select Case Range("A" & Range(Target.Address).Row).Value
Case "Bestellnummer 100"
Range("B" & Range(Target.Address).Row).Value = "-15-"
Range("C" & Range(Target.Address).Row).Value = "-25-"
Range("D" & Range(Target.Address).Row).Value = "-35-"
Case "Bestellnummer 101"
Range("B" & Range(Target.Address).Row).Value = "-222-"
Range("C" & Range(Target.Address).Row).Value = "-333-"
Range("D" & Range(Target.Address).Row).Value = "-444-"
Case "Bestellnummer 102"
Range("B" & Range(Target.Address).Row).Value = "-456-"
Range("C" & Range(Target.Address).Row).Value = "-567-"
Range("D" & Range(Target.Address).Row).Value = "-678-"
End Select
End Sub
miniversum
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range(Target.Address).Column = Range("A:A").Column Then
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="Bestellnummer 100,Bestellnummer 101,Bestellnummer 102"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End If
Select Case Range("A" & Range(Target.Address).Row).Value
Case "Bestellnummer 100"
Range("B" & Range(Target.Address).Row).Value = "-15-"
Range("C" & Range(Target.Address).Row).Value = "-25-"
Range("D" & Range(Target.Address).Row).Value = "-35-"
Case "Bestellnummer 101"
Range("B" & Range(Target.Address).Row).Value = "-222-"
Range("C" & Range(Target.Address).Row).Value = "-333-"
Range("D" & Range(Target.Address).Row).Value = "-444-"
Case "Bestellnummer 102"
Range("B" & Range(Target.Address).Row).Value = "-456-"
Range("C" & Range(Target.Address).Row).Value = "-567-"
Range("D" & Range(Target.Address).Row).Value = "-678-"
End Select
End Sub
miniversum
Ok hier die Erklärung:
Allgemeiner Ablauf:
Es wird geprüft ob du eine Zelle im der Spalte A markiert hast und wenn das so ist dan wird für diese Zelle eine Gültigkeitsprüfung erzeugt.
Ablauf im einzelnen:
'hier wird überprüft ob du eine Zelle in Spalte A markiert hast (über Target.Address)
If Range(Target.Address).Column = Range("A:A").Column Then
'ab hier wird eine Gültigkeitsprüfung erzeugt
With Selection.Validation
.Delete 'alte Werte für die Gültigkeitsprüfungen löschen
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=
xlBetween, Formula1:="Bestellnummer 100,Bestellnummer 101,Bestellnummer 102" 'Neue Werte für die Gültigkeitsprüfung anlegen
'ab hier noch andere Parameter wie Leerzeichen ignorieren, das der Pfeil angezeigt wird, und was bei andern Eingaben geschehen soll (Fehlermeldungen oder Hinweise oder so), ist nur der vollständigkeit halber.
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End If
Wenn du jetzt bei D noch was haben willst könntest du das ganze noch in einander verschachteln, wird aber bei mehreren Angaben recht ausfendig.
Drum würd ich einfach noch den Block für D drunterhängen und die If bedingung am anfang anpassen.
Das ganze wäre also so:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range(Target.Address).Column = Range("A:A").Column Then
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=
xlBetween, Formula1:="Bestellnummer 100,Bestellnummer 101,Bestellnummer 102"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End If
Select Case Range("A" & Range(Target.Address).Row).Value
Case "Bestellnummer 100"
Range("B" & Range(Target.Address).Row).Value = "-15-"
Range("C" & Range(Target.Address).Row).Value = "-25-"
Range("D" & Range(Target.Address).Row).Value = "-35-"
Case "Bestellnummer 101"
Range("B" & Range(Target.Address).Row).Value = "-222-"
Range("C" & Range(Target.Address).Row).Value = "-333-"
Range("D" & Range(Target.Address).Row).Value = "-444-"
Case "Bestellnummer 102"
Range("B" & Range(Target.Address).Row).Value = "-456-"
Range("C" & Range(Target.Address).Row).Value = "-567-"
Range("D" & Range(Target.Address).Row).Value = "-678-"
End Select
'Ab hier für D die Auswahl
If Range(Target.Address).Column = Range("D:D").Column And _
Range("A" & Range(Target.Address).Row).Value = "Bestellnummer 102" Then
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=
xlBetween, Formula1:="-678-,-666-"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End If
End Sub
miniversum
Allgemeiner Ablauf:
Es wird geprüft ob du eine Zelle im der Spalte A markiert hast und wenn das so ist dan wird für diese Zelle eine Gültigkeitsprüfung erzeugt.
Ablauf im einzelnen:
'hier wird überprüft ob du eine Zelle in Spalte A markiert hast (über Target.Address)
If Range(Target.Address).Column = Range("A:A").Column Then
'ab hier wird eine Gültigkeitsprüfung erzeugt
With Selection.Validation
.Delete 'alte Werte für die Gültigkeitsprüfungen löschen
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=
xlBetween, Formula1:="Bestellnummer 100,Bestellnummer 101,Bestellnummer 102" 'Neue Werte für die Gültigkeitsprüfung anlegen
'ab hier noch andere Parameter wie Leerzeichen ignorieren, das der Pfeil angezeigt wird, und was bei andern Eingaben geschehen soll (Fehlermeldungen oder Hinweise oder so), ist nur der vollständigkeit halber.
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End If
Wenn du jetzt bei D noch was haben willst könntest du das ganze noch in einander verschachteln, wird aber bei mehreren Angaben recht ausfendig.
Drum würd ich einfach noch den Block für D drunterhängen und die If bedingung am anfang anpassen.
Das ganze wäre also so:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range(Target.Address).Column = Range("A:A").Column Then
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=
xlBetween, Formula1:="Bestellnummer 100,Bestellnummer 101,Bestellnummer 102"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End If
Select Case Range("A" & Range(Target.Address).Row).Value
Case "Bestellnummer 100"
Range("B" & Range(Target.Address).Row).Value = "-15-"
Range("C" & Range(Target.Address).Row).Value = "-25-"
Range("D" & Range(Target.Address).Row).Value = "-35-"
Case "Bestellnummer 101"
Range("B" & Range(Target.Address).Row).Value = "-222-"
Range("C" & Range(Target.Address).Row).Value = "-333-"
Range("D" & Range(Target.Address).Row).Value = "-444-"
Case "Bestellnummer 102"
Range("B" & Range(Target.Address).Row).Value = "-456-"
Range("C" & Range(Target.Address).Row).Value = "-567-"
Range("D" & Range(Target.Address).Row).Value = "-678-"
End Select
'Ab hier für D die Auswahl
If Range(Target.Address).Column = Range("D:D").Column And _
Range("A" & Range(Target.Address).Row).Value = "Bestellnummer 102" Then
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=
xlBetween, Formula1:="-678-,-666-"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End If
End Sub
miniversum
Ok war ein Fehler von mir:
Ändere den Case mal folgendermasen um:
Case "Bestellnummer 102"
Range("B" & Range(Target.Address).Row).Value = "-456-"
Range("C" & Range(Target.Address).Row).Value = "-567-"
if not Range("D" & Range(Target.Address).Row).Value = "-678-" or Range("D" & Range(Target.Address).Row).Value = "-666-" then Range("D" & Range(Target.Address).Row).Value = "-678-"
Das mit den einfach reinkopieren stimmt aber das mit dem selbst Makro ausführen brauchst du eigentlich nicht.
Es sollte immer laufen sobald du auf ein Feld in der Tabelle klickst, weil die Funktion ja Worksheet_SelectionChange(ByVal Target As Range) heißt.
Hast du es in einen Modul Ordner (modul 1 oder so) kopiert? Es muß im Tabellenblat (z.B. Tabelle1) stehen.
Wen du smal ausprobieren willst kannst du ja mal folgendes in Tabelle1 (oder wie es bei dir heist) kopieren:
Sub Worksheet_SelectionChange(ByVal Target As Range)
MsgBox Target.Address
End Sub
Hier sollte einfach nur imemr in Meldungsfenster aufgeben was dir Anzeigt welche Zelle du angeklickt hast.
miniversum
Ändere den Case mal folgendermasen um:
Case "Bestellnummer 102"
Range("B" & Range(Target.Address).Row).Value = "-456-"
Range("C" & Range(Target.Address).Row).Value = "-567-"
if not Range("D" & Range(Target.Address).Row).Value = "-678-" or Range("D" & Range(Target.Address).Row).Value = "-666-" then Range("D" & Range(Target.Address).Row).Value = "-678-"
Das mit den einfach reinkopieren stimmt aber das mit dem selbst Makro ausführen brauchst du eigentlich nicht.
Es sollte immer laufen sobald du auf ein Feld in der Tabelle klickst, weil die Funktion ja Worksheet_SelectionChange(ByVal Target As Range) heißt.
Hast du es in einen Modul Ordner (modul 1 oder so) kopiert? Es muß im Tabellenblat (z.B. Tabelle1) stehen.
Wen du smal ausprobieren willst kannst du ja mal folgendes in Tabelle1 (oder wie es bei dir heist) kopieren:
Sub Worksheet_SelectionChange(ByVal Target As Range)
MsgBox Target.Address
End Sub
Hier sollte einfach nur imemr in Meldungsfenster aufgeben was dir Anzeigt welche Zelle du angeklickt hast.
miniversum
Hallo captainchaos666!
Analog dazu müsstest Du (zur Sicherheit) auch für die Spalte E schreiben:
- sieht zwar in der Liste nicht so gut aus, funktioniert aber (zumindest bei mir).
Die Zuweisung für Spalte D bei "Bestellnummer 102" habe ich so verstanden, dass eine Vorbelegung mit "-678-" erfolgen soll, falls nicht schon ein Eintrag "-666-" existiert - richtig? Auf Basis dieser Annahme habe ich den Code etwas vereinfacht.
HTH
bastla
- Mit Range("A2:A10") soll die erste Auswahl doch nur von Feld A2 bis A10 funktionieren, bei mir geht es über die ganze Excelliste (Zeile 1 bis Zeile xxxxx)?
Ändere die Zeile If Range(Target.Address).Column = Range("A2:A10").Column Then inIf Not Intersect(Target, Range("A2:A10")) Is Nothing Then
Analog dazu müsstest Du (zur Sicherheit) auch für die Spalte E schreiben:
If Not Intersect(Target, Range("E2:E10")) Is Nothing And Range("A" & Range(Target.Address).Row).Value = "Bestellnummer 101" Then
- Bei Auswahl E kann ich zwar nach der Bedingung auswählen, aber es wird kein Wert angezeigt?
Ich gehe davon aus, dass das führende Minuszeichen zB in "-666-" stört. Kannst Du- dieses vermeiden,
- durch ein benutzerdefiniertes Zahlenformat ersetzen oder
- die Zellen vorweg als "Text" formatieren?
Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="'-678-,'-666-"
- Wenn ich in die Zeile Klicke egal wo, so wird die ganze Zeile aktualisiert, ist es möglich die Aktualisierung nur dann durchzuführen wenn auf Spalte A geklickt wurde oder was im Menü A ausgewählt wurde?
Meinst Du mit "aktualisiert", dass der Programmteil "Vorbelegung Werte" ausgeführt wird? Falls ja, könntest Du diesen Teil auf das Ereignis "Worksheet_Change" beziehen und den ganzen Block in das folgende Sub stellen (im "Worksheet_SelectionChange"-Ereignis brauchst Du ihn dann natürlich nicht mehr):Private Sub Worksheet_Change(ByVal Target As Range)
'nur bei einer Änderung in den Zellen "A2:A10"
If Intersect(Target, Range("A2:A10")) Is Nothing Then Exit Sub
' Vorbelegung Werte
Select Case Range("A" & Range(Target.Address).Row).Value
Case "Bestellnummer 100"
Range("B" & Range(Target.Address).Row).Value = "-15-"
Range("C" & Range(Target.Address).Row).Value = "-25-"
Range("D" & Range(Target.Address).Row).Value = "-35-"
Case "Bestellnummer 101"
Range("B" & Range(Target.Address).Row).Value = "-222-"
Range("C" & Range(Target.Address).Row).Value = "-333-"
Range("D" & Range(Target.Address).Row).Value = "-444-"
Case "Bestellnummer 102"
Range("B" & Range(Target.Address).Row).Value = "-456-"
Range("C" & Range(Target.Address).Row).Value = "-567-"
If Not Range("D" & Range(Target.Address).Row).Value = "-666-" Then Range("D" & Range(Target.Address).Row).Value = "-678-"
End Select
End Sub
HTH
bastla
Die Einschränkung, dass nur dann was verändert wird wenn du in einem bestimmten Bereich was änderst bzw. draufklickst sollte eigentlich durch das
If Range(Target.Address).Column = Range("A:A").Column Then
realisiert werden. -> Nur Änderungen bzw reagieren wenn Du irgentwo in die A Spalte klickst.
Target.Address liefert dir dabei die Zelle in die Du geklickt hast.
(Target.Address).Column Die Spalte in die du geklickt hast.
(Target.Address).Row Die Zeile in die du geklickt hast.
If Range(Target.Address).Column = Range("A2:A10").Column
bzw.
If Range(Target.Address).Column = Range("E2:E10").Column
kann also deshalb nicht Funktionieren weil du eine Spalte mit einer Spalte des Bereichs vergleichst. Du könntest aber die zeilen noch vergleichen udn dadurch den bereich einschränken.
miniversum
If Range(Target.Address).Column = Range("A:A").Column Then
realisiert werden. -> Nur Änderungen bzw reagieren wenn Du irgentwo in die A Spalte klickst.
Target.Address liefert dir dabei die Zelle in die Du geklickt hast.
(Target.Address).Column Die Spalte in die du geklickt hast.
(Target.Address).Row Die Zeile in die du geklickt hast.
If Range(Target.Address).Column = Range("A2:A10").Column
bzw.
If Range(Target.Address).Column = Range("E2:E10").Column
kann also deshalb nicht Funktionieren weil du eine Spalte mit einer Spalte des Bereichs vergleichst. Du könntest aber die zeilen noch vergleichen udn dadurch den bereich einschränken.
miniversum