2 votes

Excel : formule pour trouver une date entre deux dates à partir de la valeur d'une cellule

Je travaille sur un grand nombre de données et j'ai besoin de récupérer des données en fonction de la valeur d'une cellule et d'une date. Je me rends compte que ma tâche peut être effectuée par une macro mais je veux plutôt une formule simple.

Problema : J'ai deux fichiers Excel, disons File1 et File2. Le premier ressemble à quelque chose comme ceci : Les dates sont en MM/DD/YYYY format.

  A           B             C
-----------------------------------
Val1       myDate        Result
-----------------------------------
AJSKD      12/12/1991    
AJSKD      12/12/1992
AJSKD      11/10/1992
ASHDI      01/10/1992

Et le deuxième fichier contient :

  A           B              C                D
-----------------------------------------------------
 Val2       data         beginDate         endDate
-----------------------------------------------------
 AJSKD      21ASD       12/10/1992        12/31/1992
 AJSKD      23AIO       10/10/1992        11/31/1992
 ADSUI      21389       12/01/1993        02/21/1994
 MKASI      AS123       01/12/1994        04/01/1994
 ASHDI      34AS1       01/11/1992        01/31/1992

Maintenant ce que je veux c'est, je veux un filtre sur AJSKD dans le fichier 2, quelque chose comme ça : =IF(File1$A2=File2$A:A)

et quand c'est vrai, je veux un autre critère : =IF(AND(mydate>=beginDate,myDate<=endDate)

et lorsque les deux conditions sont vraies, je veux copier les données dans la cellule de résultat.

Considérons un exemple : Je veux remplir la colonne de résultat de A3. Je filtre donc les enregistrements dans File2 sur la base de la valeur AJSKD . En filtrant, j'obtiens :

      A           B              C                D
-----------------------------------------------------
 Val2       data         beginDate         endDate
-----------------------------------------------------
 AJSKD      21ASD       12/10/1992        12/31/1992
 AJSKD      23AIO       10/10/1992        11/31/1992

Mais comme myDate associés à AJSKD dans le fichier 1 est 12/12/1992 . Cette date se situe entre 12/10/1992 y 12/31/1992 Je veux les données 21ASD y no 23AIO .

Le résultat devrait donc être le suivant :

  A           B             C
-----------------------------------
Val1       myDate        Result
-----------------------------------
AJSKD      12/12/1991     FALSE
AJSKD      12/12/1992     21ASD
AJSKD      11/10/1992     23AIO
ASHDI      01/10/1992     FALSE

Comme j'ai un million d'enregistrements, je ne peux pas filtrer manuellement et rechercher les données. J'essayais donc de trouver la formule qui fonctionnerait dessus. La deuxième partie fonctionne bien, c'est-à-dire la recherche par date. Mais je suis incapable de construire la formule pour la première partie. Quelqu'un peut-il m'indiquer la bonne direction ?

Merci d'avance.

0voto

databyte Points 708

En utilisant des tableaux appelés File1 et File2 et des références structurées au lieu de fichiers différents, cela fonctionne comme dans la capture d'écran :

=IFERROR(LOOKUP(2,1/((File2[Val2]=[@Val1])*(File2[beginDate]<=[@myDate])*(File2[endDate]>=[@myDate])),File2[data]),FALSE)

enter image description here

Vous ne voulez pas l'exécuter avec des références de colonnes entières. Si vous avez "un million" de lignes, soit vous les transformez en tableau et utilisez des références structurées, soit vous utilisez des plages exactes pour vos données, par exemple $A$1:$A$400000

Oh, et j'ai pris la liberté de corriger le 31 novembre au 30. Mon ordinateur préférait ça.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X