rand(life)

배열수식, AGGREGATE 함수 본문

컴퓨터/엑셀

배열수식, AGGREGATE 함수

flogsta 2017. 3. 22. 22:50

오늘은 오랜만에 배열수식


아래와 같은 표에서 가장 최근에 출고한 날짜를 찾는 함수이다

주의할 것은 날짜가 정렬이 되어있지 않다는 것.


날짜

입고

출고

재고

06월 01일

 

20

100

07월 01일

50

 

150

08월 01일

 

60

90

07월 13일

30

 

120

07월 31일

 

40

80

07월 14일

20

 

100


배열수식을 이용한다.


{=MAX(IF(C4:C9<>"",A4:A9))}

C4:C9<>""을 먼저 계산하여


{TRUE;FALSE;TRUE;FALSE;TRUE;FALSE} 를 만들고

그 다음에 A4:A9의 값인

{42887;42917;42948;42929;42947;42930}

와 함께 IF에 의해 합치면 

IF({TRUE;FALSE;TRUE;FALSE;TRUE;FALSE}, {42887;42917;42948;42929;42947;42930})가 되어 그 결과

TRUE의 위치에 있는 값이 들어와서 

{42887;FALSE;42948;FALSE;42947;FALSE}

이렇게 된다. 이 중에서 Max함수에 의해 제일 큰 값에 해당하는 

42948 을 날짜 셀서식으로 변환하면 8월1일이 나온다.


하지만 엑셀 2010버전에 있는 함수를 이용하여 다음과 같이 가능한데

=AGGREGATE(14,6,A4:A9/(C4:C9<>""),1)

이 함수는 특정값을 제외하고 계산할 수 있는 함수이다

MS오피스 도움말


요약하면, average, sum, count, counta, max, min, product, large, small 등의 함수가 하는 기능을 사용할 수 있고


무시하는 것은

숨겨진행, 오류값 등을 무시할 수 있다. 


=AGGREGATE(14,6,A4:A9/(C4:C9<>""),1)

위의 수식에서 숫자가 말하는 의미는 다음과 같다

14 = large 함수

6 = 오류값 무시

즉, C4:C9의 범위 중 숫자가 있는 셀의 True/False값(0,1)을 분모로

같은 범위의 날짜 있는 셀값을 분자로 하면

False가 있는 부분은 0으로 나누니 DIV/0 오류가 난다

오류가 있는 부분은 무시하고, Large함수로 첫번째로 큰 값을 구하면 8월1일이다