Excel Matrix filtern?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Ich gehe jetzt erstmal nur ein auf:

Matrix mit mehreren Attributen/Worten. (A1:D20)
Attribute/Wörter kommen mehrmals vor!
Ziel:
Jedes dieser Worte soll genau 1x (untereinander) wiedergegeben werden.

Ich habe erstmal eine Lösung mit zwei Hilfsspalten gebastelt. Lässt sich evtl. noch zusammenfassen (könnte aber schwierig werden):

In z.B. :

F1: =INDEX($A$1:$D$20;REST(ZEILE(A1)-1;20)+1;GANZZAHL((ZEILE(A1)-1)/20)+1)

und runterkopieren bis F80. In

G1: = F1

In

G2: =WENN(ZÄHLENWENN($G$1:G1;F2)>0;"";F2)

und runterkopieren bis G80.

In H1 - das ist jetzt die Ergebnisspalte mit den lückenlosen, nicht doppelten Werten aus A1:D1- :

H1: {=WENNFEHLER(INDEX($G$1:$G$80;KKLEINSTE(WENN(($G$1:$G$80)<>"";ZEILE($G$1:$G$80));ZEILE(A1)));"")}

und runterkopieren bis H80.

  • **ACHTUNG!**   
  • Das ist eine Matrixformel. 
  • Das bedeutet: Die geschweiften Klammern {} NICHT mit eingeben, sondern die Eingabe der Formel NICHT mit ENTER abschließen, sondern mit: 
  • STRG & SHIFT & ENTER (alle drei gleichzeitig). 
  • DAS erzeugt die { } und macht die Formel zu einer Matrixformel. 

Hilft Dir das schon mal weiter?

34

Danke erstmals für deine Hilfe :)

Also ich hab das ganze mal ausprobiert und auch wenn das mit den 2 "langen" Hilfszeilen nicht gerade schön ist, funktioniert es fast perfekt.

Hatte ja noch den Punkt mit den "außer den Zeilen ..." angesprochen.

Ich war so frei und hab deine Formel etwas umgebaut, damit die leeren Zellen und die Werte die ich nicht haben will, am Ende nicht als 0 in der "Liste" auftauchen:

=WENN((ZÄHLENWENN($G$1:G1;F2)>0)+(F2=0)+(F2="Slot 1");"";F2)

Das einzige, was mich nun noch "überfordert" ist folgendes: Wenn die Matrix sich nicht in A1:D20 befindet, sondern z.b. in B8:G17, dann muss ich die Formeln logischerweise umbauen. Das sollte ja dann (hoffentlich) so aussehen:

=INDEX($B$8:$G$17;REST(ZEILE(B1)-1;10)+1;GANZZAHL((ZEILE(B1)-1)/10)+1)

=WENN(ZÄHLENWENN($C$22:C22;B23)>0;"";B23)

Bei der 3. habe ich etwas rumprobiert, allerdings habe ich die nicht so richtig zum laufen gebracht ... Was muss ich denn hier ändern, wenn sich die Position der Matrix ändert?

Lg Tobi

0
53
@lasttobi12

Ja, die ersten beiden dürften so passen.

Die dritte Formel hat mit der Position der Matrix nichts mehr zu tun, denn sie bezieht sich ja nur auf die zweite Hilfsspalte. Ich musste jetzt erstmal nachdenken um rauszubekommen, wo Du Deine Hilfsspalten hin gesetzt hast. Ich denke jetzt mal, die erste beginnt in B22, dann in C22 = B22 und in

C23: =WENN(ZÄHLENWENN($C$22:C22;B23)>0;"";B23)

Dann lauter die dritte, also die Ergebnisspalte in

D22: {=WENNFEHLER(INDEX($C$22:$C$81;KKLEINSTE(WENN(($C$22:$C$81)<>"";ZEILE($C$22:$C$81)-21);ZEILE(A1)));"")}

Beachte die -21 bei ZEILE(....)-21; die ist nötig, weil das Zeileargument des INDEX-Bereiches C22:C81 mit 1 als erster Zeile beginnt, nicht mit der Adresszeile 22!

Ich hoffe ich habe das richtig verstanden.

P.S.: Das nächst Mal bitte die Zelladressen zu den Formel schreiben, so wie ich es gemacht habe. Zumindest, wenn sie relevant sind.🙂

0
53

Danke fürs

0

Es gibt eine Funktion für das Entfernen von Duplikaten. Diese kannst du pro Spalte anwenden.

Daten → Datentools → Duplikate entfernen

Es kommt darauf an, ob du das pro Spalte oder für den gesamten Bereich möchtest. Wendest du die Funktion auf alle Spalten an, werden nur die Zeilen gelöscht, die in allen Spalten einer anderen Zeile entsprechen.

Wendest du die Funktion pro Spalte an, kommt es auf die geschickte Wahl der Reihenfolge an.

Beispiel:

A B 
1 3
1 2
3 2

Wendest du das Entfernen von Duplikaten zuerst auf Spalte A an, erhältst du

A B
1 3
3 2

Wendest du die Funktion zuerst auf Spalte B an, entsteht

A B
1 3
1 2

Die Funktion arbeitet korrekt. Du musst dir überlegen, was genau du haben möchtest. Deine Frage lässt diese Details offen.

34

Mein Ziel ist es, jedes Element (außer eben die, die in A4:D4 und A8:D8 stehen) exakt 1x an anderer Stelle auf dem Blatt wiederzugeben, mit Hilfe einer Formel.

Was zum Beispiel funktionieren würde wäre:

(Angenommen ich will die Ausgabe in F1:F15)

F1: =A1

F2-F15: Hier sollte dann der nächste Wert angeschaut und mit F1 verglichen werden. Sind sie identisch, dann wird wiederum der nächste angeschaut und verglichen usw. Sind sie nicht identisch, dann wird der Wert in die Zelle eingetragen.

Sprich: Wenn die Matrix 80 Elemente enthält, wobei 15 davon verschieden sind, dann werden diese 15 untereinander ausgegeben (Reihenfolge dabei egal)

Da nicht nur ich mit der Datei arbeiten werden sondern auch Personen, die mit Excel nicht viel anfangen können, würde ich das ganze gerne so umsetzen, dass man nichts manuell tun muss, sondern das ganze schon im Vorfeld mit einer Formel geregelt wird, die dann bei Füllung der Matrix arbeitet.

1

Matlab: Wie kann man schnell zwei Elemente einer Matrix bei Erfüllung einer Bedingung tauschen (Verbesserung meines Codes)?

Ich habe folgendes Problem:

Ich habe eine Matrix A mit der Größe 4xn

Zudem habe ich einen Bedinungsmatrix B. Sie ist 1xn groß und enthält boolesche Variablen.

    A=  |1 2 3 4|     B=|1|
        |5 6 7 8|       |0|
        |9 1 2 3|       |1|
        |4 5 6 7|       |1|
        |8 9 1 2|       |0|
    ...                 ....

Immer wenn das Element in einer Spalte von B 'true' ist, sollen zwei Elemente dieser der Spalte von A getauscht werden. Die obere Matrix sieht dann so aus (1. mit 2. Element getauscht):

|2 1 3 4|   
|5 6 7 8|
|1 9 2 3|
|5 4 6 7|
|8 9 1 2| ...

Ich habe das bisher so gelöst:

for i=1:size(B,1)
  if B(i)==1
    A(i,:)=[A(i,2), A(i,1), A(i,3),A(i,4)];
  end
end

Dieser Code ist aber sehr langsam.

Wie kann ich diese Aufgabe schneller erledigen?

...zur Frage

Was möchtest Du wissen?