=VLOOKUP(VLOOKUP(A7,InventoryLog,5,FALSE),Price_list,IF(Q2InventoryLog!F7="S",2,3),FALSE)
Ich möchte, dass meine Funktion eine Bestellnummer nachschlägt und sie auf dieser Grundlage dem Artikelnamen zuordnet. Wenn die Artikelbeschreibung klein ist („S“), sollte sie den Preis in Spalte 1 zurückgeben, und wenn der Artikel nicht klein ist, sollte sie den Artikel in Spalte 3 zurückgeben.
Das Problem ist, dass ich manchmal eine leere Zeile habe, sodass alles durcheinander gerät. Wenn also eine Zeile dahinter ist, erscheint die leere Zeile.
Ich möchte, dass meine Formel leere Zeilen überspringt und den Wert in der folgenden Zeile verwendet. Ich habe versucht, die WENN-Funktion anzupassen, aber das funktioniert auch nicht.
Es gibt 3 Möglichkeiten:
IF(Q2InventoryLog!F7="L"...),
IF(Q2InventoryLog!F7="S"...)
IF(Q2InventoryLog!F7=""...)
Antwort1
Ich könnte mich hier völlig irren (das ist schon einmal passiert...), aber wenn ich Ihre Formel lese, scheint es mir, dass das, was Sie suchen, in der Formel nicht ausreichend berücksichtigt wird. Ich verstehe es so:
=VLOOKUP(VLOOKUP(A7,InventoryLog,5,FALSE),Price_list,IF(Q2InventoryLog!F7="S",2,3),FALSE)
VLOOKUP(A7,InventoryLog,5,FALSE:
A7 verfügt über eine Bestell-ID-Nummer und die Suche verwendet diese, um in Spalte 5 des Datensatzes, den sie im Bestandsprotokoll findet, einen Artikelnamen zu finden.
Anschließend verwendet die externe Suche diesen Artikelnamen, um einen Datensatz in der Preisliste zu finden, und gibt basierend auf der Zeile in Q2InventoryLog Spalte 2 oder 3 aus diesem Datensatz in der Preisliste zurück.
Logischerweise stellt sich die Frage, WARUM F7 die Zeile mit dem Datensatz sein sollte, den A7 benötigt? Offensichtlich besteht möglicherweise kein Zusammenhang: Sie hatten „7“ im Sinn und haben einfach „F“ und „7“ eingegeben. Aber warum dann „F“ und woher wissen wir sinnvollerweise, was zu finden ist? Vielleicht soll Q2InventoryLog mit InventoryLog Zeile für Zeile übereinstimmen und tut das SEHR gut (oder ... das wäre ziemlich sinnlos, nachdem die Daten einige Male verwendet und dann aktualisiert wurden!) AUSSER dass sich ab und zu aus irgendeinem Grund leere Zeilen einschleichen.
In Ihrer Frage wird nicht darauf eingegangen, warum die Datensätze übereinstimmen (warum F7 die Zelle ist, die in diese Zelle HARDCODE ist, und nicht in eine andere). Sie scheinen es immer wieder und jedes Mal mit mehr Details zu fragen, also werden Sie das vielleicht in der nächsten Iteration ansprechen. Und jemand kann Ihnen mehr zielgerichtete Hilfe geben, eine einfachere Hilfe. Weniger umfassend. Aber bis dahin gebe ich Ihnen zwei Hinweise:
Sie möchten vielleicht versuchen, die Q2InventoryLog-Daten so zu organisieren, dass sie entweder den Artikelnamen enthalten, den die interne Suche findet, oder die Bestellnummer, mit der alles beginnt (ersteres wäre in gewisser Weise der Goldstandard, da es „bessere“ Daten wären (nicht zuletzt, weil es allgemeiner nützlich ist), aber zweiteres wäre ein vollkommen gültiger Ansatz, da man vermuten würde, dass die Daten „vor Ort“ hier Größeninformationen in den auftragsbezogenen Informationen enthalten würden, obwohl dies in der allgemeineren Version Ihres Problems nicht unbedingt funktioniert). Aber in einem der beiden Fälle könnten Sie eine zweite interne Suche verwenden, um den genauen Datensatz zu finden und Daten auszuwählen, die die Spalte F7 darstellt, und diese in Ihrem
IF()
Test verwenden.Sie könnten sich etwas Mühe geben, die Daten von leeren Zeilen zu bereinigen. Ich meine NICHT, NICHT, NICHT die traditionelle Datenbereinigung oder die Suche nach dem Grund, warum in die Q2InventoryLog-Daten leere Zeilen eingefügt werden. Wenn Sie das wollten oder könnten, würden Sie es vermutlich tun, und das Problem wäre behoben (na ja, es wartet darauf, Sie im ungünstigsten Moment zu überraschen).
Was ich meine, ist, etwas ganz Einfaches zu tun. Verwenden Sie es, FILTER()
um einfach die leeren Zeilen herauszufiltern. Verwenden Sie nicht die Filterfunktion von Excel, da dies die Zeilenadressen beibehalten würde und noch mehr Arbeit erforderlich wäre. Verwenden Sie einfach FILTER()
den tatsächlichen Q2InventoryLog-Datensatz mit einer einfachen „etwas <> leer“-Bedingung, damit die Schwierigkeiten verursachenden leeren Zeilen weggelassen werden. Da die Q2InventoryLog-Daten anscheinend eins zu eins übereinstimmen sollten, würde das den Zweck erfüllen. Verwenden Sie bei Ihrer Suche die Tabelle/den Bereich, der FILTER()
anstelle der tatsächlichen Daten erstellt wird.
Eine vereinfachte Version der FILTER()
auf diese Weise verwendeten Funktion könnte wie folgt aussehen:
(Nehmen wir an, der Datensatz ist C7:F7 in Q2InventoryLog und ganze Zeilen sind leer, nicht nur einige Zellen in einer Zeile. Wenn also C12 leer ist, stellt die ganze Zeile ein Problem dar und muss entfernt werden, da die in Zeile 12 benötigten Daten derzeit in Zeile 13 stehen und nach oben in die rechte Zeile verschoben würden, wenn Zeile 12 wegfallen würde. Nehmen wir außerdem an, die Daten stehen in C3:F27.)
=FILTER(C3:F27,C3:C27<>"")
Natürlich würden Sie das an Ihre Daten anpassen.
Ein Punkt, den man aus dem Obigen mitnehmen kann, ist, dass ein Problem manchmal auf einem anderen konzeptionellen Weg angegangen werden kann und eine einfache Lösung hat. Anstatt herauszufinden, wie man die Formel dazu bringt, eine Zeile nach unten zu springen (eine Zeile beim ersten Mal, dann bei allen nachfolgenden Nachschlagevorgängen unterhalb dieses Punkts, bis eine weitere leere Zeile auftritt, nach der alle wissen müssen, dass sie nach unten springen müssen, und nicht nur die eine Zeile, sondern jetzt zwei, bis ...), finden Sie heraus, wie Sie die problemverursachenden Zeilen verschwinden lassen. Und wenn Sie das tun und, wie hier, vielleicht nur lästige Datenbereinigung oder Argumente mit der Datenquelle als einzige Möglichkeiten sehen, dies zu tun, könnte sich, wie hier, herausstellen, dass es noch eine andere Möglichkeit gibt, dies ohne diese Arbeit oder diese Argumente zu tun.
Und schließlich, wenn es nicht wirklich eine Eins-zu-eins-Entsprechung mit unglücklich eingefügten zufälligen leeren Zeilen gibt, die alles durcheinander bringen, dann wird das die Sache auch nicht lösen (mmm... es sei denn, es stellt sich heraus, dass Sie die Q2InventoryLog-Struktur verwenden KÖNNEN, um diese zusätzliche interne Suche zu unterstützen). Sie müssen also noch einmal fragen...
Wenn ja, vergessen Sie den Ansatz der Telefongesellschaft, nacheinander winzige Verbesserungen vorzunehmen, dann jahrelang damit Geld zu verdienen und dann noch eine winzige Verbesserung hinzuzufügen, und geben Sie einfach umfassende Informationen. Sie werden feststellen, dass dies für SIE unmittelbar viel hilfreicher ist.
Antwort2
Damit Ihre Formel leere Zellen toleriert, verwenden wir ISBLANK():
=IF(ISBLANK(A7), "", VLOOKUP(VLOOKUP(A7,InventoryLog,5,FALSE),Price_list,IF(Q2InventoryLog!F7="S",2,3),FALSE))
Dies gibt einen leeren Text zurück, wenn A7 leer ist. Wenn Sie stattdessen jedoch den Preis für den Artikel A8 zurückgeben möchten, müssen Sie einfach das "" durch die Formel von A8 ersetzen:
=IF(ISBLANK(A7), VLOOKUP(VLOOKUP(A8,InventoryLog,5,FALSE),Price_list,IF(Q2InventoryLog!F8="S",2,3),FALSE), VLOOKUP(VLOOKUP(A7,InventoryLog,5,FALSE),Price_list,IF(Q2InventoryLog!F7="S",2,3),FALSE))