2016-02-04 4 views
0

У меня есть список элементов в столбце A и соответствующие значения года и месяца в столбцах B и C соответственно. Я ищу, чтобы найти минимальный и максимальный год в столбце B (на основе определенного значения в столбце A), затем найдите соответствующий месяц в столбце C (только для значения max и min), а затем сгенерируйте и заполните дату начала и окончания в столбцах E и F соответственно. . IF @Item = Ноутбук ТОГДА НАЙТИ MIN, MAX of @YEAR и THEN НАЙТИ смежное значение в @Month. Наконец, сформулируйте и отобразите дату соответственно. Могу ли я достичь этого, используя формулу, или это выходит за рамки и лучше достигается с помощью макроса?Как найти минимальное и максимальное значения в столбце B на основе определенной строки в столбце A?

enter image description here

ответ

3

На дату начала, в E2:

=IF(A2<>A1,DATE(AGGREGATE(15,6,$B$1:$B$1000/($A$1:$A$1000=A2),1),AGGREGATE(15,6,$C$1:$C$1000/(($A$1:$A$1000=A2)*($B$1:$B$1000 = AGGREGATE(15,6,$B$1:$B$1000/($A$1:$A$1000=A2),1))),1),1),"") 

И для даты окончания в F2:

=IF(A2<>A1,EOMONTH(DATE(AGGREGATE(14,6,$B$1:$B$1000/($A$1:$A$1000=A2),1),AGGREGATE(14,6,$C$1:$C$1000/(($A$1:$A$1000=A2)*($B$1:$B$1000 = AGGREGATE(14,6,$B$1:$B$1000/($A$1:$A$1000=A2),1))),1),1),0),"") 

Затем скопируйте нужные строки.

Агрегатная функция была введена в 2010 году, поэтому она не будет работать в Excel 2007 или ранее.

enter image description here

я над думал, что они могут быть упрощена:

=IF(A2<>A1,AGGREGATE(15,6,DATE($B$1:$B$1000,$C$1:$C$1000,1)/($A$1:$A$1000=A2),1),"") 

И:

=IF(A2<>A1,AGGREGATE(14,6,EOMONTH(DATE($B$1:$B$1000,$C$1:$C$1000,1),0)/($A$1:$A$1000=A2),1),"") 

Благодаря @Jerry для показа более лаконичный способ.

+0

Спасибо за формулу! Я просто хочу заменить строку «Ноутбук» на ячейку (например, А1) вместо этого, если я просто хочу применить формулу по всему диапазону? – user1266515

+0

@ пользователь1266515 смотреть редактирование. Поместите в E2 и F2 и скопируйте их, они будут пустым в правильных строках и значениями в первой строке с новым элементом. –

+0

@ user1266515 извините, просто отредактировал его еще раз. См. Edit –

3

Вот то, что я думаю, что должен работать на любой версии Excel, и благодаря комментарий от @ScottCarver теперь вы можете скопировать его вниз, и это положит даты на первой строке каждого пункта:

Введите это в Е2, как формула массива, а затем скопировать вниз:

=IF(A2<>A1,MIN(IF(A:A=A2,DATE(B:B,C:C,1))),"") 

Введите это в F2, как формула массива, а затем скопировать вниз:

=IF(A2<>A1,MAX(IF(A:A=A2,DATE(B:B,C:C+1,0))),"") 

поскольку эти это формулы массива, для которых вам нужно нажать control-shift-enter, а не просто вводить. После того, как они будут введены, они будут окружены {}, чтобы указать, что они являются формулами массива.

 

Оригинал Ответ:

Вот то, что я думаю, что должен работать на любой версии Excel, но вы не можете скопировать его вниз - вы должны ввести один отдельно для каждого пункта. Если вы действительно хотите, чтобы они были распространены так, чтобы даты находились в строке первого появления предмета (как на вашем снимке экрана), то это не будет работать для вас.

Для даты начала Laptop Пункт:

=MIN(IF(A:A="Laptop",DATE(B:B,C:C,1))) 

Для даты окончания Laptop Пункт:

=MAX(IF(A:A="Laptop",DATE(B:B,C:C+1,0))) 

Эти формулы массива, так что вы должны нажать Control-Shift-Enter вместо того, чтобы просто войти. После того, как они будут введены, они будут окружены {}, чтобы указать, что они являются формулами массива.

+0

Я просто получаю 0, когда я вводил это в ячейку даты начала. Пытаясь выполнить шаги вычисления – user1266515

+1

@ user1266515, убедитесь, что вы вводите его как формулу массива. Вам также может потребоваться форматировать ячейку в качестве даты. –

+1

Так что еще раз я подумал. Вы можете сделать копию вниз, просто используйте '= IF (A2 <> A1, MIN (IF (A: A = A2, DATE (B: B, C: C, 1)))," ")' –

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