Supportnet / Forum / Tabellenkalkulation
Gültigkeit Liste
Frage
Hallo an alle!!!
Für eine Produktauswahl habe ich drei Listen erstellt
(über Gültigkeit Liste), die sich je nach Auswahl verändern
Beispiel:
Liste 1 ist die Auswahl des Systems
Liste 2 ist die Auswahl der Systemvariante
Liste 3 ist die Auswahl des Zubehörs
Die Auswahlmöglichkeiten in Liste 2 und 3 sind also abhängig von Liste 1.
Wie kann ich aber nun immer nach der Auswahl von Liste 1, die Inhalte in den Listen 2 und 3,
die ja noch von der vorherigen Auswahl vorbelegt sind automatisch löschen!?
Gibt es da eine Lösung?
Vielleicht über ein Makro?
Habe schon einige Varianten probiert, so recht geklappt hat es jedoch noch nicht...
Wäre super!!!
[*][quote][sup][i]Admininfo: bitte vermeide Mehrfachanfragen in verschiedenen, bzw. gleichen Gruppen. Siehe [url=https://supportnet.de/groupfaqs/3][u]FAQ2.[/u][/url][/i][/sup][/quote]
Antwort 1 von piano
Hallo
Kann ich davon ausgehen, dass die Auswahl der Listfelder über Datenquelle aus dem Tabellenblatt (nicht manuelle Eingabe) erfolgt?
Wenn ja, kann ein Makro helfen. Melde Dich!
Gruss piano
Kann ich davon ausgehen, dass die Auswahl der Listfelder über Datenquelle aus dem Tabellenblatt (nicht manuelle Eingabe) erfolgt?
Wenn ja, kann ein Makro helfen. Melde Dich!
Gruss piano
Antwort 2 von piano
Zusatz:
In den Gültigkeitsbereichen 2 und 3 müssen die Schlüsselfelder (System) aus GB 1 enthalten sein!
In den Gültigkeitsbereichen 2 und 3 müssen die Schlüsselfelder (System) aus GB 1 enthalten sein!
Antwort 3 von Mitch23
Ja genau die Listen sind mit Datenquellen auf dem Tabellenblatt verknüpft...
Antwort 4 von Mitch23
Hi Piano,
hättest du mir da vielleicht ein schlaues Makro, das so etwas kann. Es sollte halt automatisch wenn man in Liste 1 ein neues System wählt, sofort die Vorbelegung in den Listen 2+3 löschen...
Wäre ich Dir sehr dankbar für und könnte relaxt in Wochenende gehen :-)
Wenn mir sonst jemand helfen kann, nur los!!!
Danke Euch
hättest du mir da vielleicht ein schlaues Makro, das so etwas kann. Es sollte halt automatisch wenn man in Liste 1 ein neues System wählt, sofort die Vorbelegung in den Listen 2+3 löschen...
Wäre ich Dir sehr dankbar für und könnte relaxt in Wochenende gehen :-)
Wenn mir sonst jemand helfen kann, nur los!!!
Danke Euch
Antwort 5 von piano
Hallo
Nach wie vor fehlt mir die Info über die Schlüssel in GB 2 und 3 , ohne die ist ein Makro sinnlos!
Nach den Kriterien muß ja selektiert werden.
Nach wie vor fehlt mir die Info über die Schlüssel in GB 2 und 3 , ohne die ist ein Makro sinnlos!
Nach den Kriterien muß ja selektiert werden.
Antwort 6 von Mitch23
Verstehe nicht ganz was du meinst, sorry.
Also so sind meine Gültigkeitskriterien für die jeweiligen Listen:
Gültigkeitskriterien zulassen: Liste
Liste 1 Quelle:
=$I$1:$I$5
Liste 2 Quelle:
=WENN($B$2="System A";$L$2:$L$3;WENN($B$2="System B";$J$2:$J$6;$M$2:$M$4))
Liste 3 Quelle:
=$K$2:$K$7
Und ich will nun praktisch sobald ich in Liste 1 ein System auswähle, dass die Felder für Liste 2 und Liste 3, die ja von der vorherigen Auswahl noch belegt sind, sofort gelöscht werden!
Also so sind meine Gültigkeitskriterien für die jeweiligen Listen:
Gültigkeitskriterien zulassen: Liste
Liste 1 Quelle:
=$I$1:$I$5
Liste 2 Quelle:
=WENN($B$2="System A";$L$2:$L$3;WENN($B$2="System B";$J$2:$J$6;$M$2:$M$4))
Liste 3 Quelle:
=$K$2:$K$7
Und ich will nun praktisch sobald ich in Liste 1 ein System auswähle, dass die Felder für Liste 2 und Liste 3, die ja von der vorherigen Auswahl noch belegt sind, sofort gelöscht werden!
Antwort 7 von Mitch23
Als Schlüssel könnte ich den Systemnamen verwenden, also
Liste 1:
System A
System B
Liste2:
System A V1
System A V2
Liste3:
System A V1 Z1
System A V1 Z2
Meinst du das etwa so?
Sorry, denke wahrscheinlich etwas zu umständlich!?
Liste 1:
System A
System B
Liste2:
System A V1
System A V2
Liste3:
System A V1 Z1
System A V1 Z2
Meinst du das etwa so?
Sorry, denke wahrscheinlich etwas zu umständlich!?
Antwort 8 von piano
Hallo
Ja das meinte ich, wollte nur wissen, wo die Kriterien für die Auswahl liegen.
Ich schlage allerdings einen anderen Aufbau der kompletten Auswahltabellen vor.
Dies ermöglicht eine variable Gestaltung wie Ergänzung und Entfernen einzelner Komponenten.
Ich bastle also eine Lösung für folgenden Aufbau als Beispiel:
Liste 1 Quelle:
=$I$1:$I$5
Liste 2 Quelle:
=$K1:$L6
Liste 3 Quelle:
=$N1:$P6
In Spalte I: alle Systeme (Liste 1)
In Spalten K und L: Systeme und Systemvarianten in allen Kombinationen (Liste 2)
In Spalten N, O und P: Systeme, Systemvarianten und Zubehör in allen Kombinationen (Liste 3).
Im Prinzip würde man mit Liste 3 auskommen, der Makro für den automatischen Aufbau von Liste 1 und 2 wäre eine andere Baustelle.
falls OK, melde Dich!
Ja das meinte ich, wollte nur wissen, wo die Kriterien für die Auswahl liegen.
Ich schlage allerdings einen anderen Aufbau der kompletten Auswahltabellen vor.
Dies ermöglicht eine variable Gestaltung wie Ergänzung und Entfernen einzelner Komponenten.
Ich bastle also eine Lösung für folgenden Aufbau als Beispiel:
Liste 1 Quelle:
=$I$1:$I$5
Liste 2 Quelle:
=$K1:$L6
Liste 3 Quelle:
=$N1:$P6
In Spalte I: alle Systeme (Liste 1)
In Spalten K und L: Systeme und Systemvarianten in allen Kombinationen (Liste 2)
In Spalten N, O und P: Systeme, Systemvarianten und Zubehör in allen Kombinationen (Liste 3).
Im Prinzip würde man mit Liste 3 auskommen, der Makro für den automatischen Aufbau von Liste 1 und 2 wäre eine andere Baustelle.
falls OK, melde Dich!
Antwort 9 von Mitch23
Ja okay!!!
Antwort 10 von piano
Hallo
Die Listfelder sind in E3,E5 und E7
In "Diese Arbeitsmappe" / Workbook-Fenster folgenden Code eintragen:
Public SwiSYS As Boolean
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Address = "$E$3" Then
SystemGewählt
SwiSYS = True
End If
If Target.Address = "$E$5" And Not SwiSYS Then
SVGewählt
End If
SwiSYS = False
End Sub
Dann in einem Modul:
Sub SystemGewählt()
On Error Resume Next
Range("J:J").Clear
LetzteK = Range("K65536").End(xlUp).Row
zsv = 0
For i = 1 To LetzteK
If Cells(i, 11).Value = Selection.Value Then
zsv = zsv + 1
Cells(zsv, 10).Value = Cells(i, 12).Value
End If
Next i
Range("E5").Select
Selection.Value = ""
If zsv = 0 Then
With Selection.Validation
.Delete
End With
Else
bereichsv = "=$J$1:$J$" & zsv
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=bereichsv
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = "Einen Wert aus der Liste wählen!"
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End If
Range("E5").Select
End Sub
Sub SVGewählt()
On Error Resume Next
Range("M:M").Clear
LetzteO = Range("O65536").End(xlUp).Row
zsv = 0
For i = 1 To LetzteO
If Cells(i, 14).Value = Range("E3").Value And Cells(i, 15).Value = Selection.Value Then
zsv = zsv + 1
Cells(zsv, 13).Value = Cells(i, 16).Value
End If
Next i
Range("E7").Select
Selection.Value = ""
If zsv = 0 Then
With Selection.Validation
.Delete
End With
Else
bereichsv = "=$M$1:$M$" & zsv
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=bereichsv
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = "Einen Wert aus der Liste wählen!"
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End If
End Sub
Die Spalten "J" und "M" werden als Hilfsspalten für die Gültigkeit verwendet.
Du kannst natürlich alle Zellen / Spalten ändern, beachte dabei auch die Spaltennummern in den "Cells" - Anweisungen.
Gruß piano
Es wäre nett, wenn Du ein Feedback abgeben könntest,
ob der Lösungsvorschlag Dein Problem gelöst hat.
- probieren geht über studieren -
Die Listfelder sind in E3,E5 und E7
In "Diese Arbeitsmappe" / Workbook-Fenster folgenden Code eintragen:
Public SwiSYS As Boolean
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Address = "$E$3" Then
SystemGewählt
SwiSYS = True
End If
If Target.Address = "$E$5" And Not SwiSYS Then
SVGewählt
End If
SwiSYS = False
End Sub
Dann in einem Modul:
Sub SystemGewählt()
On Error Resume Next
Range("J:J").Clear
LetzteK = Range("K65536").End(xlUp).Row
zsv = 0
For i = 1 To LetzteK
If Cells(i, 11).Value = Selection.Value Then
zsv = zsv + 1
Cells(zsv, 10).Value = Cells(i, 12).Value
End If
Next i
Range("E5").Select
Selection.Value = ""
If zsv = 0 Then
With Selection.Validation
.Delete
End With
Else
bereichsv = "=$J$1:$J$" & zsv
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=bereichsv
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = "Einen Wert aus der Liste wählen!"
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End If
Range("E5").Select
End Sub
Sub SVGewählt()
On Error Resume Next
Range("M:M").Clear
LetzteO = Range("O65536").End(xlUp).Row
zsv = 0
For i = 1 To LetzteO
If Cells(i, 14).Value = Range("E3").Value And Cells(i, 15).Value = Selection.Value Then
zsv = zsv + 1
Cells(zsv, 13).Value = Cells(i, 16).Value
End If
Next i
Range("E7").Select
Selection.Value = ""
If zsv = 0 Then
With Selection.Validation
.Delete
End With
Else
bereichsv = "=$M$1:$M$" & zsv
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=bereichsv
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = "Einen Wert aus der Liste wählen!"
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End If
End Sub
Die Spalten "J" und "M" werden als Hilfsspalten für die Gültigkeit verwendet.
Du kannst natürlich alle Zellen / Spalten ändern, beachte dabei auch die Spaltennummern in den "Cells" - Anweisungen.
Gruß piano
Es wäre nett, wenn Du ein Feedback abgeben könntest,
ob der Lösungsvorschlag Dein Problem gelöst hat.
- probieren geht über studieren -
Antwort 11 von Mitch23
Danke für deine Lösung...
Vielleicht interessiert es dich...ich habe noch einen anderen Lösungsvorschlag bekommen, der funktioniert auch und ist etwas einfacher...
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = ("$B$2") Then
Range("B4").Select
Selection.ClearContents
Range("B6").Select
Selection.ClearContents
Range("B2").Select
End If
End Sub[/i
Trotzdem vielen Dank!!!
Vielleicht interessiert es dich...ich habe noch einen anderen Lösungsvorschlag bekommen, der funktioniert auch und ist etwas einfacher...
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = ("$B$2") Then
Range("B4").Select
Selection.ClearContents
Range("B6").Select
Selection.ClearContents
Range("B2").Select
End If
End Sub[/i
Trotzdem vielen Dank!!!