web-dev-qa-db-fra.com

Fonction Query / Filter recherchant la date la plus proche inférieure à la date de commande pour un tableau de dates à l'aide d'une variable donnée

Aperçu

J'ai besoin d'obtenir le coût de quelque chose en comparant les dates des articles à une date de commande pour un ou plusieurs articles identiques avec des dates d'articles différentes, et en veillant à sélectionner la date de l'article qui est inférieure mais la plus proche de la date de la commande.

Plus précisément, j'ai besoin d'obtenir la valeur Price de la feuille Items en comparant les Dates dans la feuille Items avec le Order Date Sélectionné à partir de la feuille Orders. Assurez-vous de sélectionner le Price qui est inférieur mais le plus proche du Order Date Dans Labels pour le ID1 Donné.


Problème et formule

Je peux obtenir le prix du ID1 Donné; cependant, si deux ou plusieurs ID1 partagent la même date que la formule suivante se casse.

IF($B$2:$B <> "",ARRAYFORMULA(VLOOKUP(MAX(FILTER(FILTER(Items!$C$2:$C,Items!$A$2:$A = B2),FILTER(Orders!$B$2:$B,Orders!$A$2:$A = A2) >= FILTER(Items!$C$2:$C,Items!$A$2:$A =B2))),{Items!$C$2:$C,Items!$B$2:$B},2,0)),"")

La formule ici fonctionne pour la première recherche; cependant, si la même date est utilisée pour d'autres éléments, la formule se rompt et renvoie le premier. Cela est dû à la façon dont la fonction RECHERCHEV utilise la date pour rechercher les entrées; cependant, je ne sais pas comment le faire, donc il utilise ID1 comme filtre.


Comment j'y suis allé

Étape 1: obtenez Order Date De ID2

INDEX(Orders!$B$2:$B,MATCH(A2,Orders!$A$2:$A,0)) ou FILTER(Orders!$B$2:$B,Orders!$A$2:$A = A2)

Étape 2: Obtenez Price à partir de ID1

FILTER(Items!$C$2:$C,Items!$A$2:$A = B2)

Étape 3: Comparez le ItemDate au Order Date Et obtenez le Date qui est inférieur mais le plus proche du Order Date

MAX(FILTER(FILTER(Items!$C$2:$C,Items!$A$2:$A = B2),FILTER(Orders!$B$2:$B,Orders!$A$2:$A = A2) >= FILTER(Items!$C$2:$C,Items!$A$2:$A =B2)))

Je crois que c'est incorrect, mais je ne sais pas comment le faire utiliser ID1 comme filtre, ou obtenir la valeur la plus proche au lieu de renvoyer toutes les valeurs avant la date de commande.

Étape 4: Obtenez le prix sélectionné.


Liens de feuille Google

lecture seule | inscriptible


Si je n'ai pas clarifié la question, je ferai de mon mieux pour l'expliquer davantage.

1
TheDT

Il manque quelque chose à votre formule.
Vous n'avez pas pris en compte la variable ID1 Dans la feuille Items.

Il s'agit de la formule corrigée pour la cellule C2 Dans la feuille Products:

=IF($B$2:$B <> "",ARRAYFORMULA(VLOOKUP(MAX(FILTER(FILTER(Items!$C$2:$C,Items!$A$2:$A = B2),FILTER(Orders!$B$2:$B,Orders!$A$2:$A = A2) >= FILTER(Items!$C$2:$C,Items!$A$2:$A =B2))),{Items!$C$2:$C,Items!$B$2:$B}*(Items!$A$2:$A=B2),2,0)),"")

Ce qui est nécessaire est l'ajout de *(Items!$A$2:$A=B2) pour que la dernière partie de votre formule devienne {Items!$C$2:$C,Items!$B$2:$B}*(Items!$A$2:$A=B2)

Veuillez consulter la colonne corrigée

1
marikamitsos