148 Aufrufe
Gefragt in Tabellenkalkulation von jelena Mitglied (829 Punkte)
Hallo guten Tag, wenn in Zeile C6 bis L6 ein Filter aktiviert wird, soll in letzten beschriebenen Spalte L ein x eingetragen werden und zwei Zeilen vorher in Spalte L das x gelöscht werden und beim zurücksetzen des Filters wieder ein x zwei Zeilen vorher in Spalte L wo es vorher war. Danke

16 Antworten

0 Punkte
Beantwortet von xlking Experte (1.7k Punkte)
Hallo Jelena,

Hä? Wo soll denn nun das X stehen? In jeder der gefilterten Zeilen? Oder nur in einer bestimmten Zeile? Und warum soll das dann zwei Zeilen vorher wieder rein? Was ist das Ziel des Ganzen?

Gruß Mr. K.
0 Punkte
Beantwortet von jelena Mitglied (829 Punkte)

Hallo Mr. K. Bitte um Entschuldigung ich habe mich zu ungenau ausgedrückt, wenn in Zeile C6 bis L6 ein Filter aktiviert wird, soll aus der letzten beschriebenen Spalte K in der Spalte L daneben ein x eingetragen werden und zwei Zeilen vorher in Spalte L das x gelöscht werden und beim zurücksetzen des Filters wieder ein x zwei Zeilen vorher in Spalte L wo es vorher war. Ich habe ein Beispiel angehängt. Danke

0 Punkte
Beantwortet von xlking Experte (1.7k Punkte)

Weiß, zwar immer noch nicht wozu du das brauchst. Aber hier mal ein entsprechender Code. Dieser gehört in das Tabellenmodul wo du die Tabelle hast. Der Code geht davon aus, dass es sich um eine Intelligente Tabelle handelt.

Private Sub Worksheet_Calculate()
  If FilterActive Then
    Cells(Rows.Count, "K").End(xlUp).Offset(-2, 1).ClearContents
    Cells(Rows.Count, "K").End(xlUp).Offset(0, 1) = "x"
  Else
    Cells(Rows.Count, "K").End(xlUp).Offset(0, 1).ClearContents
    Cells(Rows.Count, "K").End(xlUp).Offset(-2, 1) = "x"
  End If
End Sub
Function FilterActive() As Boolean
  Dim flt As Filter
  For Each flt In Me.ListObjects(1).AutoFilter.Filters
    If flt.On Then
      FilterActive = True
      Exit For
    End If
  Next flt
End Function

Gruß Mr. K.

0 Punkte
Beantwortet von jelena Mitglied (829 Punkte)

Hallo Mr. K. beim Öffnen der Datei kommt die folgende Fehlermeldung und danach wird die Datei automatisch geschlossen ohne Warnung.

0 Punkte
Beantwortet von xlking Experte (1.7k Punkte)
Dann handelt es sich offensichtlich nicht um eine intelligente Tabelle. Diese würde ich dir aber empfehlen. Weil du da einfach mithilfe der Tabulatortaste neue Zeilen hinzufügen kannst und sich die Formeln dann immer an die neue Zeilenanzahl anpassen. Das geht bei einer normalen Tabelle nicht.

Für den Moment entferne einfach das Wort Listobjects(1) sowie einen der beiden zurückbleibenden Punkte davor oder danach aus dem Code. Dann klappt das mit einer normalen Tabelle.

Gruß Mr. K.
0 Punkte
Beantwortet von jelena Mitglied (829 Punkte)

Hallo Mr. K. Ich möchte es einfacher versuchen, wenn in Zeile C6 bis K6 ein Filter aktiviert wird, soll in der Zelle Q6 eine 2 eingetragen werden und beim zurücksetzen des Filters soll in der Zelle Q6 eine 1 eingetragen werden. Ich habe ein Beispiel angehängt. Danke

0 Punkte
Beantwortet von beverly_ Experte (3.3k Punkte)
Hi Jelena,

es geht auch ohne VBA: schreibe in Q6 folgende Formel:

=WENN(TEILERGEBNIS(3;C6:K21)-ANZAHL2(C6:K21)=0;1;2)

Beachte dabei, dass du die Ziffer 21 durch die Nummer der letzten Zeile deines Filterbereichs ersetzen musst.

Bis später, Karin
0 Punkte
Beantwortet von jelena Mitglied (829 Punkte)
Hallo Karin, ich hätte doch lieber ein VBA da sich die Zeilenanzahl ständig ändert, ich habe eine .xlsm Datei. Danke
0 Punkte
Beantwortet von beverly_ Experte (3.3k Punkte)

Hi Jelena,

die sich ändernde Zeilenanzahl ist kein Grund, VBA zu verwenden, denn wenn ich das richtig interpretiere, verwendest du eine intelligente Tabelle. Dort musst du die Zeilenanzahl nicht extra ermitteln - Excel weiß selbst, wieviele Zeilen diese Tabelle hat. Dazu ist die Formel nur wie folgt anzupassen:

=WENN(TEILERGEBNIS(3;Tabelle1[#Alle])-ANZAHL2(Tabelle1[#Alle])=0;1;2)

Tabelle1 musst du hierbei natürlich durch den Namen deiner intelligenten Tabelle ersetzen.

Bis später, Karin

0 Punkte
Beantwortet von jelena Mitglied (829 Punkte)

Hallo Karin, ich bekomme diese Meldung     =WENN(TEILERGEBNIS(3;Einfach Quer[#Alle])-ANZAHL2(Einfach Quer[#Alle])=0;1;2)    und verwende keine intelligente Tabelle. Danke

...