Sammlung ==> #17 Zweidimensionale Suche mit
Matrixfunktionen
Zweidimensionale Suche mit Matrixfunktionen:
Gastbeitrag
Man kann mit den Matrixfunktionen Werte nicht nur eindimensional suchen
lassen, sondern auch zweidimensional. Auch wenn man mit der Funktion SVERWEIS
eine Menge Fälle lösen kann, so greift sie dennoch nicht für
alle Beispiele. Angenommen in einer Tabelle befinden sich Entfernungen.
Dabei werden die Orte in der obersten Zeile und in der ersten Spalte eingetragen.
In der Matrix befinden sich die Entfernungen. Die Tabelle ist symmetisch,
da die Entfernung von A nach B so groß ist wie von B nach A.
In einer zweiten Tabelle gibt der Benutzer in einer Spalte einen Ausgangsort
ein, in einer zweiten Spalte einen Zielort. Es soll die Entfernung in
der ersten Tabelle gesucht werden, damit über die Kilometerangaben
eine Fahrtkostenabrechnung durchgeführt wird.
Damit der Anwender eine Dropdownliste in jeder Zelle hat, muss die Liste
der Orte von der ersten Tabelle auf die zweite verknüpft werden.
Stehen die Orte in der ersten Spalte, dann kann die Zeilenposition der
zelle C2 mit der Funtkion
=VERGLEICH(C2;$A$1:$A$51;0)
ermittelt werden. Analog wird die Position der Spalte von D2 mit
=VERGLEICH(D2;$A$1:$A$51;0)
gefunden. Stehen diese Ergebnisse in E2 und F2, dann liefert INDEX mit
der Zeil- und Spaltennummer das Ergebnis des Wertes der Zeile und der
Spalte:
=INDEX(Entfernungen!$A$1:$AY$51;E2;F2)
Oder man fasst die Funktion in einer Zelle zusammen:
=INDEX(Entfernungen!$A$1:$AY$51;VERGLEICH(C2;$A$1:$A$51;0);
VERGLEICH(D2;$A$1:$A$51;0))
Hat der Benutzer allerdings noch keine Werte eingegeben, dann liefert
VERGLEICH einen Fehler (#NV). Dies kann mit ISTFEHLER abgefangen werden:
=WENN(ISTFEHLER(INDEX(Entfernungen!$A$1:$AY$51;VERGLEICH(C2;
$A$1:$A$51;0);VERGLEICH(D2;$A$1:$A$51;0)));"";
INDEX(Entfernungen!$A$1:$AY$51;VERGLEICH(C2;$A$1:$A$51;0);
VERGLEICH(D2;$A$1:$A$51;0)))
Mit diesem Ergebnis kann nun weitergerechnet werden.
Noch ein ähnliches Beispiel: Angenommen in einer Matrix stehen
mehrere Kilometerangaben untereinander und mehrere Gewichtsangaben nebeneinander.
Ihnen sind jeweils bestimmte Werte (Preise) zugeordnet.
Nun soll in ein zweites Tabellenblatt in einer Spalte ein Wert aus der
ersten Spalte stehen (Kilometerangabe); daneben ein Wert aus der Beschriftungszeile
(Gewichtsangabe). Der Wert, der in der ersten Matrix gefunden wird, soll
in die dritte Zelle daneben geschrieben werden.
In die erste Zelle gibt der Benutzer die km ein. Die Formel
=VERGLEICH(A2;Tabelle1!$B$2:$B$19)
berechnet die Zeile, in der sich dieser Wert befindet. Mit
=VERGLEICH(B2;Tabelle1!$B$2:$Q$2)
wird die Spalte berechnet, in der sich der Wert kg befindet. Nun kann
über
=INDEX(Tabelle1!$B$2:$Q$19;C2;D2)
die entsprechende Zelle herausgeholt werden. Excel sucht bei Zwischenwerten
den nächstkleineren Wert, also bei 101 oder 199 wird immer 100 verwendet.
Wollen Sie aufrunden, dann zählen Sie eins dazu:
=INDEX(Tabelle1!$B$2:$Q$19;C2;D2+1)
Dies kann nun zu einer Formel zusammengefasst werden:
=INDEX(Tabelle1!$B$2:$Q$19;VERGLEICH(A3;Tabelle1!$B$2:$B$19);
VERGLEICH(B3;Tabelle1!$B$2:$Q$2))
Und noch nicht eingegebene Werte sollen keine Fehler melden:
=WENN(ISTFEHLER(INDEX(Tabelle1!$B$2:$Q$19;VERGLEICH(A4;
Tabelle1!$B$2:$B$19);VERGLEICH(B4;Tabelle1!$B$2:$Q$2)));"";
INDEX(Tabelle1!$B$2:$Q$19;VERGLEICH(A4;Tabelle1!$B$2:$B$19);
VERGLEICH(B4;Tabelle1!$B$2:$Q$2)))
Die Formeln stehen alle in Spalte E. Nun können die Werte in Spalte
A und B eingetragen werden. Wenn die Formel aufrunden soll (siehe oben),
dann so:
=WENN(ISTFEHLER(INDEX(Tabelle1!$B$2:$Q$19;
VERGLEICH(A4;Table1!$B$2:$B$19);VERGLEICH(B4;Tabelle1!$B$2:$Q$2)
+1));"";INDEX(Tabelle1!$B$2:$Q$19;VERGLEICH(A4;Tabelle1!$B$2:$B$19);
VERGLEICH(B4;Tabelle1!$B$2:$Q$2)+1))
Achtung: Die Werte müssen als WERTE, d.h. als Zahlen eingegeben werden.
Sonst rechnet Excel nicht!
Sollten Rückfragen zu diesem Gastbeitrag bestehen, stehe
ich Ihnen gerne zur Verfügung. Oliver Basel.
|