@ > Home > Inhalt > Matrixeinträge mit Lücken als Vektor ohne Lücken Excel 97+

Aufgabe

Lückenhafte Matrixeinträge sollen (Nachtrag vom 2008.01.25: "zeilenweise!") lückenlos und unsortiert in einer Spalte wiedergegeben werden (als Erweiterung von http://excelformeln.de/formeln.html?welcher=160, wo es nur um eine Spalte statt einer Matrix geht).

        A        B        C        D        E        F    
  1 Matrix                                        Vektor       
  2        1        2                 3                 1      
  3                 4       50                          2      
  4                                                     3      
  5        6        7       80        9                 4      
  6       10                         11                50      
  7                12                                   6      
  8                                                     7      
  9                                                    80      
 10                                                     9      
 11                                                    10      
 12                                                    11      
 13                                                    12      
Illustration der Aufgabe

Lösung (Klaus "Perry" Pago vom 2007.06.20):

F2: =INDEX($A$2:$D$7;GANZZAHL(
KKLEINSTE(WENN($A$2:$D$7<>"";(ZEILE($1:$6)-1)*6+SPALTE(A:D));ZEILE(A1))/6)+1;REST(
KKLEINSTE(WENN($A$2:$D$7<>"";(ZEILE($1:$6)-1)*6+SPALTE(A:D));ZEILE(A1));6))

- ist ab dem = (Gleichheitszeichen) zusammenhängend in eine Excel-Zelle einzufügen
- ist eine Matrixformel (mit STRG-UMSCH-EINGABE einzugeben, sonst geht es nicht)
- ist nach unten zu kopieren

Eine Abwandlung für spaltenweise Wiedergabe wird aufgeführt unter http://excelformeln.de/formeln.html?welcher=315.

Generalisierung (etwas komplex) für beliebig große Matrix:

Benennt man die "Matrix" als solche und den (s.o.) sich wiederholenden Term

KKLEINSTE(WENN($A$2:$D$7<>"";(ZEILE($1:$6)-1)*6+SPALTE(A:D));ZEILE(A1))

als "lfdPlatz" mit der verallgemeinerten Formel (unter Einfügen Name Definieren - bezieht sich auf)

=KKLEINSTE(WENN(Matrix<>"";(ZEILE(INDIREKT("1:"&ZEILEN(Matrix)))-1)*ZEILEN(Matrix)+
SPALTE(INDIREKT(WECHSELN("A:"&ADRESSE(1;SPALTEN(Matrix);4);"1";))));ZEILE(1:1))

(in Zeile 1 des Zielvektors stehend definiert, wichtig!), dann passt sich die o.g. Lösung in der Tabelle als

(z.B. in F2:) {=INDEX(Matrix;lfdPlatz/ZEILEN(Matrix)+1;REST(lfdPlatz;ZEILEN(Matrix)))}

jeglichen Änderungen der Größe und Lage von "Matrix" sofort an, ohne dass man weitere Parameter manuell nachführen müsste. Somit können ohne sonstige Anpassung in der Matrix Zeilen und Spalten gelöscht oder eingefügt werden (!).

Hinweis: Aufgrund der max. Verschachtelungstiefe von 8 funktioniert die denkbare Formel (mit 10 Funktions-Klammerebenen)

{=INDEX(Matrix;
KKLEINSTE(WENN(Matrix<>"";(ZEILE(INDIREKT("1:"&ZEILEN(Matrix)))-1)*ZEILEN(Matrix)+
SPALTE(INDIREKT(WECHSELN("A:"&ADRESSE(1;SPALTEN(Matrix);4);"1";))));ZEILE(1:1))

/ZEILEN(Matrix)+1;REST(
KKLEINSTE(WENN(Matrix<>"";(ZEILE(INDIREKT("1:"&ZEILEN(Matrix)))-1)*ZEILEN(Matrix)+
SPALTE(INDIREKT(WECHSELN("A:"&ADRESSE(1;SPALTEN(Matrix);4);"1";))));ZEILE(1:1))

;ZEILEN(Matrix)))}

ohne die o.g. Ausgliederung des benannten Teilausdrucks lfdPlatz vor xl2007 nicht.