Excel Formel zum Angebotsvergleich

Hallo,habe mal wieder fragen zu Formel um Angebote abgleichen zu können.
Folgender Eintrag in Excel Formular:
Bezeichnung des Artikels in Zeile 6 Spalte D
Name des 1.Lieferanten in Zeile 5 Spalte G
des 2.Lieferanten in Zeile 5 Splate K
des 3.Lieferanten in Zeile 5 Spalte N
des 3.Lieferanten in Zeile 5 Spalte Q
Preis des 1.Lieferanten in Zeile 6 Spalte H
des 2.Lieferanten in Zeile 6 Splate K
des 3.Lieferanten in Zeile 6 Spalte N
des 4 Lieferanten in Zeile 6 Spalte R

nun sollte in der Zeile 6 Spalte S der güntigste Preis ermittelt werden und in Zeile 6 Spalte T der Name des günstigsten Anbieters stehen.
Ich habe dann noch ein Formular mit nur 3 Anbietern.
Wie verschiebt sich dann die Formel.
Ich bin richtig dankbar wenn mir geholfen werden kann.
Gruß Peter

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:

  1. Schritt ist den minimalen Preis zu ermiteln
  2. Schritt ist die Nummer des Anbieters hierzu zu ermitteln
  3. 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 :wink:).

Gruß
Ulrich

Sorry, ich habe die Aufgabenstellung für den Anbieter beantwortet.
Wenn man Preis und Anbieter getrennt ausweist, kann man natürlich die Formel etwas entlasten.
Sie würden dann so aussehen:
a) für den Preis:
=MIN(H6;K6;N6;R6)
b) für den Anbieter:
=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)

Bezeichnung des Artikels in Zeile 6 Spalte D
Name des 1.Lieferanten in Zeile 5 Spalte G
des 2.Lieferanten in Zeile 5 Splate K
des 3.Lieferanten in Zeile 5 Spalte N
des 3.Lieferanten in Zeile 5 Spalte Q
Preis des 1.Lieferanten in Zeile 6 Spalte H
des 2.Lieferanten in Zeile 6 Splate K
des 3.Lieferanten in Zeile 6 Spalte N
des 4 Lieferanten in Zeile 6 Spalte R

Hallo Peter,

das sieht also so aus

Liebst du komplizierte lange Formeln oder gibt es Gründe für so eine marode Tabellenstruktur?

Gruß
Reinhard

Nachfrage
Hallo Peter,

was soll geschehen, wenn mehrere Lieferanten gleich billig sind?

Gruß
Reinhard

AW: Nachfrage
Hallo Reinhard,
wenn es vorkommt das beide den gleichen Preis anbieten dann sollten beide mit Namen in Spalte T erscheinen.
Ich kann allerdings mit deiner Darstellung nichts anfangen.
Gruß Peter

Ich kann allerdings mit deiner Darstellung nichts anfangen.

Hallo Peter,

wenn deine Werte nicht verstreut über die Spalten verstreut wären wäre es einfacher zu berechnen.
Hier wird gezeigt wie das aussehen könnte:

Tabellenblatt: [Mappe1]!Tabelle1
 │ A │ B │ C │ D │
──┼─────────┼───────────┼───────┼────────┤
1 │ Artikel │ Lieferant │ Preis │ Billig │
──┼─────────┼───────────┼───────┼────────┤
2 │ Brot │ La │ 1,6 │ Lb, Ld │
──┼─────────┼───────────┼───────┼────────┤
3 │ Brot │ Lb │ 1,4 │ │
──┼─────────┼───────────┼───────┼────────┤
4 │ Brot │ Lc │ 1,5 │ │
──┼─────────┼───────────┼───────┼────────┤
5 │ Brot │ Ld │ 1,4 │ │
──┼─────────┼───────────┼───────┼────────┤
6 │ Milch │ Lc │ 0,85 │ Lf │
──┼─────────┼───────────┼───────┼────────┤
7 │ Milch │ Lf │ 0,78 │ │
──┼─────────┼───────────┼───────┼────────┤
8 │ Milch │ La │ 0,89 │ │
──┴─────────┴───────────┴───────┴────────┘

A1:smiley:8
haben das Zahlenformat: Standard

Tabellendarstellung erreicht mit dem Code in FAQ:2363

Gruß
Reinhard