2015-06-22 6 views
3

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

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

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

Любая помощь будет оценена по достоинству.

A   B   C     D 
Subject  TestDate Principal date Day difference from Principal date 
Subject 1 01/12/2014     -3 
Subject 1 02/12/2014     -2 
Subject 1 03/12/2014     -1 
Subject 1 04/12/2014 Yes    0 
Subject 2 07/12/2014     -1 
Subject 2 08/12/2014 Yes    0 
Subject 2 11/12/2014      3 
Subject 3 17/12/2014     -1 
Subject 3 18/12/2014 Yes    0 
Subject 3 24/12/2014      6 

ответ

3

Логика здесь: (1) Найдите дату для каждого объекта, являющегося основной датой, и верните ее для каждой строки; и (2) вычесть эту дату с текущей даты в col B. (2) легко, но (1) требуется способ согласования значения в B как с Subject, так и с Principal Date. Вы можете сделать это с помощью функции INDEX-MATCH с несколькими критериями MATCH.

С вашими данными в A2:C11 и заголовки столбцов в row 1, введите эту формулу в D2 и заполнить вниз:

{=B2-INDEX($A$2:$C$11,MATCH(1,($A$2:$A$11=$A2)*($C$2:$C$11="Yes"),0), 2)}

Обратите внимание, что вам нужно ввести его в качестве формулы массива с помощью CtrlShift.


Логика функции INDEX-MATCH является:

  • A2:C11 это вся ваша таблица необработанных данных; функция просматривает всю эту таблицу.
    • Обратите внимание, что вы можете включить заголовки, если хотите, что может быть полезно при определении столбца поиска путем сопоставления имени заголовка столбца. Если вы это сделаете, вам необходимо убедиться, что все ваши массивы имеют одинаковые размеры (, т. Е., если ваша таблица данных A1:C11, ваши столбцы в функции MATCH должны быть запущены также в row 1).
  • Функция MATCH ищет значение 1 из массива поиска, предоставляемого путем умножения множества логических условий. Он будет оценивать, A2=A2, A3=A2, A4=A2 и т. Д. И создать столбец значений TRUE/FALSE. Затем он сделает то же самое для C2="Yes", C3="Yes" и т. Д.Произведением логических массивов будет 1 в любое время, когда оба условия будут выполнены. (0 говорит MATCH, чтобы искать точные матч.)
  • 2 говорит функции INDEX, чтобы найти значение во втором столбце (B) в строки указанной MATCH функции - т.е., где оба условия выполнены.

Это значение затем вычитается из значения в B2, чтобы дать разницу в дате.


Как было отмечено в комментарии, эта формула может быть упрощена для индексирования только нужный столбец подстановки:

=B2-INDEX($B$2:$B$11,MATCH(1,($A$2:$A$11=$A2)*($C$2:$C$11="Yes"),0))

+0

Мне всегда нравится хороший МАТЧ с критериями массива – chancea

+1

Большое вам спасибо за помощь. Просто задаемся вопросом, почему формула не может быть: = B2-INDEX ($ B $ 2: $ B $ 11, MATCH (1, ($ A $ 2: $ A $ 11 = $ A2) * ($ C $ 2: $ C $ 11 = " Да "), 0)). Таким образом, после индекса почему он должен быть $ A $ 2: $ C $ 11, но не только $ B $ 2: $ B $ 11? –

+0

Хорошая точка. В этом случае нет никакой причины, чтобы он не мог быть '= B2-INDEX ($ B $ 2: $ B $ 11, MATCH (1, ($ A $ 2: $ A $ 11 = $ A2) * ($ C $ 2: $ C $ 11 = "Да"), 0)) '. В других случаях вам может понадобиться полный массив и аргумент номера столбца (_e.g._), чтобы динамически указывать номер столбца с чем-то вроде «MATCH (« ColName », RowHeaderArray, 0)»). –

0

Извлечение DAY() из TestDate, и добавить день разница:

Формула для столбца Основной датой: = ДЕНЬ (В2) + D2

 A   B   C     D 
1 Subject  TestDate Principal date Day difference from Principal 
2 Subject 1 2014-06-01 28    -3 

Теперь у вас есть правильный день, и вы можете сделать новую дату в новом столбце или объединить две функции.

1

В основном ту же логику, как @ Брендан, но немного короче. Это еще формула массива вводится с Ctrl + Сдвиг + Введите

=B2-SMALL(IF(IF($A$2:$A$11=A2,$C$2:$C$11)="Yes",$B$2:$B$11),1) 

Внутренний IF($A$2:$A$11=A2,$C$2:$C$11) получает вас массив только с принципалом, который соответствует теме вашего находятся. Следующий IF(IF(...)="Yes",$B$2:$B$11) получает вы имеете массив с только основной датой и FALSE для всех других значений. SMALL(...,1) дает вам только основную дату, которую вы можете вычесть из текущей даты тестирования: B2-SMALL(...)

+0

Благодарю вас за помощь. Очень признателен! –

Смежные вопросы