Hallo Peter,
zunächst einmal der Vorspann, dass ich es immer wieder befremdlich finde, dass Datenbankaufgaben versucht werden mit Excel zu lösen und man sich dann wundert, dass man einfachste Dinge nur mit riesigen Klimmzügen hinbekommt. Das Ding gehört nach MSAccess und dann vergleicht man einfach die Werte mit einer MAX()-Funktion.
Aber nun zur Fragestellung:
Die Antwort lautet:
=WAHL((FINDEN(TEXT(MIN(H6;K6;N6;R6);„0000000000,00“);TEXT(H6;„0000000000,00“)&TEXT(K6;„0000000000,00“)&TEXT(N6;„0000000000,00“)&TEXT(R6;„0000000000,00“))-1)/13+1;G5;K5;N5;Q5)
Was steckt dahinter:
- Schritt ist den minimalen Preis zu ermiteln
- Schritt ist die Nummer des Anbieters hierzu zu ermitteln
- Schritt ist diese Nummer auf die Namenszeile der Anbieter zur übertragen und dabei aber den Spaltenversatz zu berücksichtigen.
zu 1:
Die Funktion MIN(H6;K6;N6;R6) ermittelt den minimalen Wert aus den 4 Zellen. Zurückgegeben wird der Betrag der dort steht.
Damit haben wir zwar den Betrag, wissen aber noch nicht woher er kommt, da ja die Anbieter eine Zeile höher stehen und sogar noch bei Lieferant 1 und 4 jeweils um eine Spalte versetzt auftauchen.
zu 2:
Da wir wissen, dass die Abfolge der Lieferanten zumindest identisch ist Preis 1 - 4 entspricht Lieferant 1 - 4 versuchen wir die Position des Preises zu ermitteln.
Dazu formatieren wir sie als 10-stellige (ausreichend große) Zahl mit führenden Nullen und suchen in allen Angeboten, an welcher Stelle wir diesen Betrag finden.
Es wird aus allen vier Angebotszahlen ein Text zusammengebaut, der so aussieht:
Betrag1: z.B. 100,01 EUR wird zu 0000000100,01 (also 14 Zeichen)
Betrag2: z. B. 405,02 EUR wird zu 0000000405,02 (also 14 Zeichen)
usw.
Diese Textaufbereiten Zahlen werden jetzt miteinander verkettet.
somit kommt raus „0000000100,010000000405,020000000…“
Jetzt bereiten wir aus das in Punkt 1 gefundene minimale Angebot in gleicher Formatierung auf und suchen es in der zusammengefügten Textfolge.
Die Position, wo wir es finden ist jetzt irgendein Vielfaches von 14,
also die Position 1, 15, 29, 43. Somit ziehen wir 1 ab und teilen durch 14 und kennen die Position (dummerweise wird aus dem ersten Treffer eine 0, dem zweiten eine 1 usw.). Also addieren wir aufs Ergebnis wieder 1 drauf.
Jetzt wissen wir, an der wievielten Stelle der billigste Preis stand (1., 2., 3. oder 4. Preis).
zu 3:
Der Rest ist Einfach. Es gibt die Funktion WAHL(). Dort gibt man als ersten Wert eine Position ein (also 1 - 4 in unserem Fall) und danach folgen die Zellen, die in Abhängigkeit von der Position ausgegeben werden soll.
WAHL(1;H6;K6;N6;R6) gibt z. B. den Inhalt aus H6 (dem 1.Wert aus).
WAHL(3;H6;K6;N6;R6) gibt analog dazu den Inhalt von N6 aus (3.Wert).
Das war es dann auch schon.
In MSAccess würde diese Fragestellung übrigends beantwortet mit:
SELECT LIEFERANT WHERE PREIS = MIN(PREIS).
Sie erkennen, warum solche Fragestellungen in eine Datenbank gehören
).
Gruß
Ulrich