Boris

In Bertis Excelforum hat Boris am 18.12.2003 eine weitere Erklärung zu einem Lösungsansatz gepostet, der zeigt, wie man durch die Kombination der von Excel mitgelieferten Standart Tabellenfunktionen ungewöhnliche Aufgaben lösen kann. Diese Mühe soll nicht umsonst sein, daher werde ich sie hier bereitstellen.

Viele weitere Funktionen und Lösungen mit Tabellenfunktionen werden auf der Website http://www.excelformeln.de/ präsentiert.

Nun aber zur Erklärung von Boris:

Hi Leute,

ich bin ja wieder mal begeistert, mit welchem Elan ihr Euch beteiligt habt! Respekt!

Wie ihr seht, gibt es (wie für fast alle Aufgaben) mehrere Lösungen. Rainer und Silvan haben z.B. mit der Funktion INDIREKT gearbeitet, um die notwendigen Zellbezüge "zusammenzubasteln", Melanie, Thomas und ich wiederum mit BEREICH.VERSCHIEBEN.
Alle Lösungen zu erläutern wäre dann doch ein wenig viel, aber für alle, die es interessiert, hier noch der Lösungsweg der letztlich mit 255 Zeichen kürzesten Variante.

Vorab nochmals die Aufgabenstellung:

 ABCDEFGH
1Preis pro EinheitAldiLidlPennyPlus   
2Äpfel1,291,391,391,49   
3Birnen1,330,991,092,09   
4Erdbeeren3,62,992,792,89   
5Nüsse1,551,441,691,39   
6Bananen2,292,392,492,32   
7Weintrauben4,493,994,993,89   
8        
9        
10        
11Gesucht istErdbeerenDer preisgünstigste Supermarkt für Erdbeeren ist Penny mit 2,79 Euro
12der günstigsteNüsseDer preisgünstigste Supermarkt für Nüsse ist Plus mit 1,39 Euro
13Preis UNDWeintraubenDer preisgünstigste Supermarkt für Weintrauben ist Plus mit 3,89 Euro
14SupermarktBananenDer preisgünstigste Supermarkt für Bananen ist Aldi mit 2,29 Euro
15für:ÄpfelDer preisgünstigste Supermarkt für Äpfel ist Aldi mit 1,29 Euro
16 BirnenDer preisgünstigste Supermarkt für Birnen ist Lidl mit 0,99 Euro
Formeln der Tabelle
C11 : ="Der preisgünstigste Supermarkt für "&B11&" ist "&INDEX($1:$1;VERGLEICH(MIN(BEREICH.VERSCHIEBEN(A$1;VERGLEICH(B11;A:A;)-1;;;5));BEREICH.VERSCHIEBEN(A$1;VERGLEICH(B11;A:A;0)-1;;;5);))&" mit "&MIN(BEREICH.VERSCHIEBEN(A$1;VERGLEICH(B11;A:A;)-1;;;5))&" Euro"
Bedingte Formatierungen der Tabelle
ZelleNr.: / BedingungFormat
B21. / Zellwert ist gleich =MIN($B2:$E2)Abc
Excel Tabellen einfach im Web darstellen   Excel Jeanie HTML  2.0    Download  

Die Überlegung ist ja eigentlich ganz einfach:

Wie komme ich an die richtigen Koordinaten aus der Matrix A1:E7?

Der Weg zur Lösung besteht aus mehreren einzelnen Überlegungen:

1.)

Wie komme ich an DIE Zeile mit dem gesuchten Obst?

2.)

Wenn ich die Zeile dann ermittelt habe: Welches ist der niedrigste Preis aus eben dieser Zeile?

3.)

Zu welchem Supermarkt gehört der mit 1.) und 2.) ermittelte niedrigste Preis?

Zu 1.)

Die gesuchte Zeile ermittelt man am besten mit der Funktion BEREICH.VERSCHIEBEN. Diese ist nach folgender Syntax aufgebaut:
=BEREICH.VERSCHIEBEN(Bezug;Zeilen;Spalten;Höhe;Breite)

Also ausgehend von einem festen Bezugspunkt wird ein "verschobener" neuer Bereich ermittelt:
+/- x Zeilen
+/- x Spalten
Die Höhe (in Zeilen) des neuen Bereiches
Die Bereite (in Spalten) des neuen Bereiches

Als Bezug bietet sich A1 ein.
Ausgehend von diesem Bezug:
a) Wieviele Zeilen RUNTER muss ich denn gehen, um auf das gesuchte Obst zu stoßen?
b) Um wieviele Spalten muss ich den neuen Bezug "versetzen"? Antwort in unserem Beispiel einfach: NULL
c) Wie hoch muss der neue Bereich sein? Antwort auch hier ganz einfach: EINS - also eine Zeile "hoch"
d) Wie breit muss der neue Bereich sein? Auch schnell ermittelt: 5 Spalten (A bis E)

Also sieht das Wunschergebnis für z.B. "Erdbeeren" so aus:

=BEREICH.VERSCHIEBEN(A$1;3;0;1;5)

Also ausgehend von A1:
3 Zeilen runter (=A4), 0 Spalten nach rechts, Höhe: 1 Zeile und 5 Spalten breit - im Ergebnis also: A4:E4

Da die Standardbelegungen für "Spalten" Null und für "Höhe" 1 ist, kann man diese Angaben auch weglassen - also einfach nur das Semikolon stehen lassen:
=BEREICH.VERSCHIEBEN(A$1;3;;;5)

Der Knackpunkt ist hierbei aber: Wie ermittel ich die 3? Also wieviele Zeilen RUNTER muss ich denn gehen?
Hier kommt die erste Funktionsverschachtelung ins Spiel: Die Funktion VERGLEICH wird benötigt.

Mit
=VERGLEICH(B11;A:A;0)
ermittelt man, an wievielter Stelle der Spalte A der Begriff aus B11 steht. Der Rückgabewert ist also eine Zahl zwischen 1 und 65536. Am Beispiel "Erdbeeren" ist das Ergebnis also 4, denn "Erdbeeren" steht in A4 - und das ist die 4. Stelle der Suchspalte A:A (A1, A2, A3, A4 = 4. Stelle).
Da wir aber vom Bezugspunkt A1 ausgehen und ja nur 3 Zeilen runter müssen, subtrahieren wir also noch 1:
=VERGLEICH(B11;A:A;0)-1 - ergibt im Ergebnis 4-1=3

Eingebaut in die Funktion BEREICH.VERSCHIEBEN ergibt das dann:
=BEREICH.VERSCHIEBEN(A$1;VERGLEICH(B11;A:A;0)-1;;;5)

Somit ist es jetzt egal, welcher Wert in B11 steht - die richtige Zeile wird durch die Verschachtelung mit VERGLEICH immer gefunden.

zu 2.)
Da wir jetzt die Zeile ermittelt haben: Welches ist daraus der niedrigste Preis?

Das ist mit der bisherigen Antwort zu 1.) schnell erklärt:
Mit
=BEREICH.VERSCHIEBEN(A$1;VERGLEICH(B11;A:A;0)-1;;;5)
haben wird ja die Zeile rausgefunden - für Erdbeeren ist es Zeile 4 - genauer der Bereich A4:E4.
Diese verschachtelte Funktion kann man jetzt einfach in die Funktion MIN einbauen:
=MIN(BEREICH.VERSCHIEBEN(A$1;VERGLEICH(B11;A:A;0)-1;;;5)) - heisst "übersetzt" also: =MIN(A4:E4)

und das Ergebnis für Erdbeeren ist 2,79.
Das funktioniert so, weil die Funktion MIN Texte einfach ignoriert (denn in A4 steht ja ein Text). Also haben wir bis hier eine 3-fache Funktionsverschachtelung - landläufig auch als "Formel" bezeichnet .

zu 3.)
Bis hierher haben wir also sowohl die Zeile als auch das Minimum aus der Zeile ermittelt. Jetzt ergibt sich noch die Frage: Wie komme ich an den entsprechenden Supermarkt? Also: An wievielter Stelle in der entsprechenden Zeile steht denn das Minimum?

Also setzten wir wieder auf die bereits bekannte Funktion VERGLEICH, die ja nach dieser Syntax funktioniert:
=VERGLEICH(Suchkriterium;Suchmatrix;Vergleichstyp)

Die Suchmatrix für den VERGLEICH haben wir mit 1.) bereits ermittelt:
=BEREICH.VERSCHIEBEN(A$1;VERGLEICH(B11;A:A;0)-1;;;5) - Ergebnis für die "Erdbeeren": A4:E4

Das Suchkriterium (=den niedrigsten Preis) kennen wir jetzt auch mit unseren Überlegungen zu 2.):
=MIN(BEREICH.VERSCHIEBEN(A$1;VERGLEICH(B11;A:A;0)-1;;;5)) - für die "Erdbeeren" 2,79

Na ja - den Vergleichstyp sezten wir auf Null und verschachteln einfach alle Funktionen:
Suchkriterium: MIN(BEREICH.VERSCHIEBEN(A$1;VERGLEICH(B11;A:A;0)-1;;;5))        = 2,79
Suchmatrix: BEREICH.VERSCHIEBEN(A$1;VERGLEICH(B11;A:A;0)-1;;;5)                          =A4:E4
Vergleichstyp: 0
Das sieht dann so aus:
=VERGLEICH(MIN(BEREICH.VERSCHIEBEN(A$1;VERGLEICH(B11;A:A;0)-1;;;5));BEREICH.VERSCHIEBEN(A$1;VERGLEICH(B11;A:A;0)-1;;;5);0)

"Übersetzt" heisst es dadurch (für die Erdbeeren) also:
=VERGLEICH(2,79;A4:E4;0)

Das Ergebnis in diesem Beispiel ist 4 - also die 4. Stelle von A4:E4 (=D4) (A4, B4, C4, D4 = 4. Stelle) - denn dort steht "2,79"

Und was machen wir jetzt mit dieser Zahl? Logisch - an 4. Stelle der Zeile 1 muss jetzt also der gesuchte Supermarkt stehen.
Und wie lesen wir diesen Wert jetzt aus? Indem wir von der 1. Zeile einen INDEX bilden, um daraus den 4. Wert auszulesen. Dies geschieht mit:
=INDEX($1:$1;4)
Und für die 4 setzen wir obige Funktionsverschachtelung ein:
=INDEX($1:$1;VERGLEICH(MIN(BEREICH.VERSCHIEBEN(A$1;VERGLEICH(B11;A:A;0)-1;;;5));BEREICH.VERSCHIEBEN(A$1;VERGLEICH(B11;A:A;0)-1;;;5);0))
so dass wir es jetzt bereits mit einer "Multi-Funktionsverschachtelung" zu tun haben

Im Ergebnis erhalten wir dadurch den gesuchten Supermarkt: - nämlich am Beispiel der "Erdbeeren" den Penny-Markt.

Und schließlich und endlich packen wir alles in EINE Formel mit:
="der preisgünstigste Supermarkt für "&B11&" ist "&INDEX($1:$1;VERGLEICH(MIN(BEREICH.VERSCHIEBEN(A$1;VERGLEICH(B11;A:A;0)-1;;;5));BEREICH.VERSCHIEBEN(A$1;VERGLEICH(B11;A:A;0)-1;;;5);0))&" mit "&MIN(BEREICH.VERSCHIEBEN(A$1;VERGLEICH(B11;A:A;0)-1;;;5))&" Euro"

Und diese ist genau (mit dem "="-Zeichen) 258 Zeichen lang und verkürzt sich nochmals um 3 auf 255 Zeichen, wenn man den Vergleichsparameter "0" in den 3 vorhandenen VERGLEICH-Funktionen weglässt - also nur das Semikolon schreibt (denn Null ist die Voreinstellung, wenn das Semikolon vorhanden ist):

="der preisgünstigste Supermarkt für "&B11&" ist "&INDEX($1:$1;VERGLEICH(MIN(BEREICH.VERSCHIEBEN(A$1;VERGLEICH(B11;A:A; )-1;;;5));BEREICH.VERSCHIEBEN(A$1;VERGLEICH(B11;A:A; )-1;;;5);0))&" mit "&MIN(BEREICH.VERSCHIEBEN(A$1;VERGLEICH(B11;A:A; )-1;;;5))&" Euro"

wobei ich zur Darstellung hier im Forum zwischen ; und ) ein Leerzeichen setzen musste, da es sonst zu einem wird...

Und durch den richtigen Einsatz der relativen und absoluten Bezüge lässt sich diese Formel auch problemlos runterkopieren.

Um die Zusatzfrage mit der bedingten Formatierung auch noch aufzulösen:
Bereich B2:E4 markieren, so dass B2 die aktive Zelle ist.
Dann Format -> bedingte Formatierung -> Zellwert "ist gleich": =MIN($B2:$E2)
und die schöne Hintergrundfarbe "grün" zuweisen - fertig

Und zu guter Letzt beglückwünsche ich alle, die bis hier her überhaupt gelesen haben

Viele Grüße

Boris

 

Diese Seite ist Teil der Webseite http://www.nikolai-stiehl.de

Themenbereich: MS Excel.

Sollten Sie diese Seite nicht innerhalb eines Framesets angezeigt bekommen,
gelangen Sie über diesen Link auf den Einstiegsframe.