Es gibt zwar ähnliche Probleme, jedoch habe ich noch nicht das gefunden was ich brauche.
Und zwar habe ich eine Liste als Vorlage für eine Baugruppenkonfiguration. In der Zelle „L2“ möchte ich entweder den Wert „A“ (steht für Analog) oder den Wert „D“ (steht für Digital) eintragen.
In den unteren Zeilen sind die jeweiligen Teile aufgeführt. In der Spalte „L“ sind die Eigenschaften „A“, „D“, und „A / D“ (Analog und Digital) und eingetragen.
Meine Frage ist, wie ist es möglich, dass:
Wenn ich im „L2“ „A“ eintrage, dann die Zeilen mit „D“ ausgeblendet werden, so dass man nur „A“ und „A / D“ sieht,
und umgekehrt wenn ich „D“ eintrage, dass die Zeilen mit „A“ ausgeblendet werden, so dass man nur „D“ und " „A / D“ sieht.
mir fällt da nur eine Programmierung über VBA ein. Allerdings halte ich das für übertrieben, helfe aber ggfs. gerne.
Eigentlich reicht für diesen Zweck der Filter von Excel. Falls nicht bekannt:
Bereich mit den zu filternden Inhalten markieren
Unter „Daten“ den Filter einschalten.
Über die nun angezeigten DropDowns die Werte aussuchen, die man möchte…
danke für die Antwort.
Das mit dem Filter ist mir bekannt. Ich würde jedoch die VBA-Variante bevorzugen, da ich nicht will, dass beim manuellen Filtern was durcheinander kommt.
Hast du da was für mich?
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer
If Target.Row = 2 And Target.Column = 12 Then
With ActiveSheet
.Rows.Hidden = False
For i = 3 To .Cells.SpecialCells(xlLastCell).Row
If (.Cells(i, 12).Value <> .Cells(2, 12).Value) Then
.Rows(i).Hidden = True
End If
Next i
End With
End If
Funktioniert soweit.
Was mir noch fehlt ist, dass egal welcher Wert eingetragen wird, die „A / D“ und leere Zellen angezeigt werden.
Kann man da noch was machen?
Zur Erläuterung:
.Cells(i, 12).Value <> .Cells(2, 12).Value
Prüft, ob der Wert in Zeile i (.Cells(i, 12)) dem gesuchten Wert (.Cells(2, 12)) entspricht. Hier muss man dann eben auch andere Prüfungen einbauen.
Ersetze das mal mit:
(.Cells(i, 12).Value <> .Cells(2, 12).Value) and
not ((.Cells(i, 12).Value = „A / D“) or
(.Cells(i, 12).Value = „“))
(Alles in eine Zeile oder mit " _" als Zeilenende trennen…
(habs nicht geprüft…)
Hmm, jetzt funktioniert es nicht mehr. Ich habe folgendes eingetragen:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer
If Target.Row = 2 And Target.Column = 12 Then
With ActiveSheet
.Rows.Hidden = False
For i = 3 To .Cells.SpecialCells(xlLastCell).Row
If (.Cells(i, 12).Value <> .Cells(2, 12).Value) and
not ((.Cells(i, 12).Value = „F / D“) or
(.Cells(i, 12).Value = „“)) Then
.Rows(i).Hidden = True
End If
Next i
End With
End If
End Sub
Sorry das hatte ich jetzt nicht beachtet. Jetzt funktioniert es fast. Jetzt habe ich das Problem, das mir nur „F / D“ und die Leerzeilen angezeigt werden, egal ob ich F oder D eintrage…
mach mal in dem Code aus „F / D“ ein „A / D“. Ist ein Tippfehler… Oder habe ich noch etwas übersehen?
Ansonsten bitte mal zur not sprachlich beschreiben, was passieren soll:
Ich gebe in „A“ ein.
Es sollen alle Zeilen gezeigt werden, die:
„A“ oder „A / D“ … beinhalten oder „“ (leer) sind.
Ja zwischenzeitig wurde aus „A“ ==> „F“.
Genau es ist genauso wie Du es beschreibst.
Wenn ich „F“ eingebe, dann soll „F“, „F / D“ und leere Zellen angezeigt werden.
Wenn ich „A“ eingebe, dann soll „A“, „F / D“ und leere Zellen angezeigt werden.
also bitte mal genau angeben:
Welche Eingaben sind zulässig? A, F, …
Bei A anzeigen wenn: A, F / D, und leer
Bei F anzeigen wenn: F, F / D, und leer
Bei …
Und ein „freundschaftlicher“ Rat: Werde dir mal einig, wie deine Daten aussehen sollen. Das Stückchen Code ist ziemlich unflexibel! Du wenn du in Formeln etc. ähnliche Abfragen brauchst, wird das schnell nicht mehr handlbar.
Sorry, habe mich vertippt. Aus „A“ wurde „F“.
Somit sind nur F und D zulässig, also nur diese Werte können eingegeben werden.
Also:
Bei F anzeigen wenn: F, F / D, und leer
Bei D anzeigen wenn: D, F / D, und leer
Noch einmal ein Dankeschön an alle Beteiligten!
Habe nach langer Recherche folgende Lösung gefunden:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 And Not Intersect(Target, Range(„L2“)) Is Nothing Then
If AutoFilterMode = True Then
AutoFilterMode = False
End If
Range(„A3:Q3“).AutoFilter Field:=12, Criteria1:="" & Target.Text & ""
End If
End Sub