Supportnet Computer
Planet of Tech

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

Antwort 2 von piano

Zusatz:
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

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.

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!

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!?

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!

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 -

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!!!