Как получить новейшее значение из столбца с условиями - PullRequest
3 голосов
/ 29 сентября 2011

У меня есть таблица в Excel, в которой есть столбцы:

  1. Дата
  2. Личное имя
  3. Сумма (£)

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

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

Используя формулы, могу ли я получить самую последнюю сумму для конкретного человека?

Если это слишком сложно или невозможно, я могу согласиться на следующую работу: Добавьте четвертый столбец в таблицу под названием «Последний». Будет отображаться TRUE, если это последняя запись для определенного человека, FALSE, если это не так.

Ответы [ 3 ]

2 голосов
/ 29 сентября 2011

Казалось, что на этот вопрос должен быть довольно прямой ответ, но я нашел его довольно головокружительным, поэтому мне было интересно посмотреть ответ.

Сделав поиск в Google, я наткнулся на решение, размещенное на специальном сайте Excel ( смотреть здесь ). [NB - посмотрите под заголовком «Произвольный поиск»]

Применяя это к вашему примеру, предположим, что ваши данные находятся в A1:C10 и в ячейке D2 вы хотите ввести имя и вернуть самый последний платеж в ячейку D3:

1   Date    Name    Amt    EnterName
2   20 Jul  Bob     50     <enter name here>
3   13 Sep  Susan   20     = enter formula here (see below)
4   06 Jan  Xavier  100

В ячейку D3 введите следующее как формулу массива (то есть введите формулу и нажмите CTRL + SHIFT + ENTER

=INDEX($B$2:$C$10,SMALL(IF(OFFSET($B$2:$C$10,0,0,ROWS($B$2:$C$10),1)=$D$2, ROW(OFFSET($B$2:$C$10,0,0,ROWS($B$2:$C$10),1))-ROW(OFFSET($B$2:$C$10,0,0,1,1) )+1, ROW(OFFSET($B$2:$C$10,ROWS($B$2:$C$10)-1,0,1,1))+1),COUNTIF(OFFSET($B$2:$C$10,0,0,ROWS($B$2:$C$10),1),$D$2)),2)

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

2 голосов
/ 29 сентября 2011

Вот один из способов сделать это на основе ответа, который я дал в предыдущем сообщении SO .

=INDEX($C$1:$C$19,MATCH(MAX(IF($B$1:$B$19="PersonNameHere",$A$1:$A$19,0)),IF($B$1:$B$19="PersonNameHere",$A$1:$A$19,"")))

Где A - столбец «Дата», B - столбец «Имя человека»,и C - столбец Amount.Вы должны ввести это как формулу массива, нажав Ctrl + Shift + Enter.

1 голос
/ 29 сентября 2011

Я не вижу здесь простого способа сделать это только в одной формуле.

Если у вас есть данные от A2 до C11.
Вы можете добавить эту формулу настолбец 4 th (скажем, в ячейке D2):

{=MAX(IF($B$2:$B$11=B2,$A$2:$A$11,0))}

Это формула массива , которую необходимо проверить с помощью Ctrl - Shift - Введите
Это скажет вам, что является последней датой для текущего человека.

И затем найдите последняя сумма с другим столбцом (скажем, в ячейке E2) и используйте эту формулу:

=INDEX($C$2:$C$11,MATCH(D2,$A$2:$A$11,0))

[EDIT] Я только что попытался объединить формулы в один иэто просто работает:

{=INDEX($C$2:$C$11,MATCH(MAX(IF($B$2:$B$11=B2,$A$2:$A$11,0)),$A$2:$A$11,0))}

и это все еще формула массива.

Увы, @Excellll был умнее (и быстрее) и дал решение с первого взгляда

...