2

Я работаю с огромными данными, и мне нужно получать данные на основе значения ячейки и даты. Я понимаю, что моя задача может быть выполнена с помощью макроса, но мне нужна простая формула.

Проблема: у меня есть два файла Excel, скажем, File1 и File2. Первый выглядит примерно так: Даты в формате MM/DD/YYYY .

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

И второй файл содержит:

  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

Теперь я хочу получить фильтр AJSKD в File2, что-то вроде этого: =IF(File1$A2=File2$A:A)

и когда это правда, я хочу другие критерии: =IF(AND(mydate>=beginDate,myDate<=endDate)

и когда оба условия выполняются, я хочу скопировать данные в результирующую ячейку.

Рассмотрим пример: я хочу заполнить столбец результатов A3. Поэтому я фильтрую записи в File2 на основе значения AJSKD . По фильтрации я получаю:

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

Но так как myDate связанный с AJSKD в File1, это 12/12/1992 . Эта дата находится в промежутке между 12/10/1992 и 12/31/1992 , мне нужны данные 21ASD а не 23AIO .

Таким образом, результат должен быть таким:

  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

Поскольку у меня есть миллион записей, я не могу фильтровать вручную и искать данные. Поэтому я пытался придумать формулу, которая будет работать над этим. Хорошо работает вторая часть, т.е. поиск по дате. Но я не могу построить формулу для первой части. Может кто-нибудь, пожалуйста, укажите мне в правильном направлении.

Заранее спасибо.

1 ответ1

0

Используя таблицы с именами File1 и File2 и структурированные ссылки вместо разных файлов, это работает согласно скриншоту:

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

Вы не хотите запускать это с целыми ссылками на столбцы. Если у вас есть "миллион" строк, либо превратите их в таблицу и используйте структурированные ссылки, либо используйте точные диапазоны для ваших данных, например, $A$1:$A$400000

О, и я позволил себе исправить 31 ноября до 30 числа. Моему компьютеру это понравилось больше.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .