Spaltenweise Datenmanipulation des FILTER()-Resultats
#1
Hallo zusammen,

aus einer Ressourcen-Tabelle möchte ich abhängig von einem Filter mittels der FILTER()-Funktion Datensätze in eine Zieltabelle übertragen. Ich filtere dabei anhand einer ID-Spalte.

Die resultierenden Datensätze gehen über mehrere Spalten. Einige dieser Spalten sind Währungen, andere sind Textspalten.

Jetzt stellt sich das Problem der leeren Zellen in der Ressourcentabelle (die es geben darf und soll):
Das Resultat der Filterfunktion ist bei leeren Zellen ein NULL-Wert. Klar, ich kann über Datei-->Optionen-->Erweitert die Nullen ausblenden lassen, ABER dann werden mir gar keine Nullwerte mehr angezeigt. In den Währungsspalten dagegen soll es möglich sein, Nullwerte einzugeben und angezeigt zu bekommen.

Gibt es eine Option, das Resultat der FILTER()-Funktion spaltenweise zu bearbeiten, bspw. mit einer WECHSELN()-Funktion die Nullwerte der Textspalten zu ersetzen?

Ich weiss, ich könnte alternativ für jede Zielspalte eine separate Filterfunktion nutzen, und jene Resultate dann bearbeiten, ABER: Ich möchte das Resultat der Filter-Funktion auch sortieren lassen und es wird für mich deutlich komplizierter, wenn ich nicht-zusammenhängende Spalten wieder zeilenweise sortieren muss, da die Datensätze nicht eindeutig sein müssen und mir dann die Zuordnung schwer fällt, wenn im worst case viele Zellen zweier Zeilen identische Werte haben und die Sortierung nachher möglicherweise falsch matched.

Hat mir jemand einen Rat?

Liebe Grüsse
Binary91
Antworten Top
#2
Hi,

wenn es dir nur um die Optik geht: in der Zieltabelle in den Spalten, in denen leere Zellen vorkommen, ein Zahlenformat zu verwenden, das Nullen unterdrückt (z.B. "0;-0;;@").

Das funktioniert natürlich nicht, wenn in einer Spalte sowohl Nullen, als auch leere Zellen vorkommen.
In dem Fall wäre es wohl am einfachsten in der Ausgangstabelle den leeren Zellen einen unsichtbaren Inhalt (z.B. ein Leerzeichen) zu verpassen.

Noch eine Möglichkeit wäre folgende UDF
Code:
Function Inhalt(Bereich As Range) As Variant
'Gibt den Inhalt einer Zelle zurück.
'Entspricht =Bereich außer dass eine leere Zelle "" statt 0 zurück gibt
'Funktioniert nun auch in einer Matrix-Formel
Dim temp As Variant
Dim i As Long, k As Long
With Bereich
    If .Count = 1 Then
        If IsError(.Value) Then
            temp = .Value
        ElseIf .Value = "" Then
            temp = ""
        Else
            temp = .Value
        End If
    Else    'Bereich.Count <>1
        ReDim temp(1 To .Rows.Count, 1 To .Columns.Count)
        For i = 1 To .Rows.Count
            For k = 1 To .Columns.Count
                With Bereich(i, k)
                    If IsError(.Value) Then
                        temp(i, k) = .Value
                    ElseIf .Value = "" Then
                        temp(i, k) = ""
                    Else
                        temp(i, k) = .Value
                    End If
                End With
            Next k
        Next i
    End If
End With
Inhalt = temp
End Function
Diese verwendest du dann zum Kapseln deiner zu filternden Matrix:
Code:
=FILTER(INHALT(A2:E99);B2:B99="x")
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
[-] Folgende(r) 1 Nutzer sagt Danke an HKindler für diesen Beitrag:
  • Binary91
Antworten Top
#3
Eine VBAfreie Lösung könnte so aussehen:
Code:
=FILTER(
  WENN(
      ISTLEER(Tabelle1);
      "";
      Tabelle1);
  Tabelle1[Wert]>5)
[-] Folgende(r) 1 Nutzer sagt Danke an Gast für diesen Beitrag:
  • Binary91
Antworten Top
#4
(01.03.2023, 13:14)EarlFred schrieb: Eine VBAfreie Lösung könnte so aussehen:
Code:
=FILTER(
  WENN(
      ISTLEER(Tabelle1);
      "";
      Tabelle1);
  Tabelle1[Wert]>5)

Oh mein Gott, das ist ja exakt die Lösung, die ich suchte! So ganz werde ich Matrixdenkeweise bei EXCEL-Formeln wohl nie verstehen. Bei der Syntax dieser Formel hätte ich vermutet, dass mir die gesamte Filterfunktion nun entweder eine leere Matrix oder eine komplett gefüllte Matrix liefern würde. Ich wusste nicht, dass ISTLEER() in diesem Fall zellenweise referenziert und das mit der FILTER-Funktion auch harmonisiert. Bei einigen Funktionen klappt das ja nicht so gut..

Da kommt mir gleich noch eine zweite Frage: Du verwendest in dieser Formel "Tabelle1[Wert]". Für das Management meiner Namen würde ich gerne sämtliche Tabellen, nicht nur die Rohdaten-Tabellen, als solche intelligente Tabellen deklarieren. Leider lässt Excel das nicht zu, wenn in einer solchen Tabelle Überlauf-Funktionen zur Anwendung kommen. Gibt es da einen Trick oder ist das aussichtslos?

@HKindler:
Vielen Dank für Deinen Beitrag. Wenn die Methode von EarlFred nicht funktionieren würde, hätte ich es auf jeden Fall mit der Zellformatierung versucht, danke für den Hinweis! Die UDF-Methode ist super, darf ich nur leider nicht anwenden, da das System bei uns Makro-Dateien unterbindet. Eine entsprechende Lösung mit Lambdas ist wahrscheinlich nicht möglich, mir fällt zumindest kein Weg ein..
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste