Sunday, July 27, 2014

[엑셀] 배열 수식 Array Formula

30년 간의 복리 적금의 원리합계(또는 이자)를 계산해 보고 싶었다.

불입은 한 달에 한 번 한다 치고, 연 이율을 12로 나누어 월 이율을 구한 다음
(월 이율)^(개월 수)를 곱한 값들을 더하면 될 것이다.

s = m*Sigma{(1+r)^n}n->360 대략 이런 식?

30년은 360개월이니까 일일이 값을 입력한다면(핸들을 잡고 마우스를 끄는 것도) 꽤 귀찮을 것이다. 한 방에 하는 법을 찾아야 한다.

문제를 좀 더 단순화해서 1부터 10까지 더하는 방법을 생각해 보자. (답은 55)
s = Sigma{n}n->10

ROW()가 행 번호를 반환하는 함수이므로 ROW(A1), ROW(A10) 등을 쓰면 될 것 같다.
그럼 SUM(ROW(A1:A10))?

원래 SUM은 범위를 받는 함수이므로 꼭 될 것 같지만 안 된다. 그냥 '1'이 나오고 만다.
  (ROW( 상태에서 범위를 지정하면 제일 작은 행번호-여기서는 1-가 반환된다.)

(프로그래밍 할 줄 아는 사람의 건전한) 상식으로는 ROW(A1:C3) 같은 걸 입력하면, {1, 2, 3}이 나와야 할 거 아닌가?
 - 근데 그냥 1이 나오고 끝이라는 것이다.

그러면 SUM(ROW(A1):ROW(A10)) 이건 어떨까? 
이건 아예 오류가 난다. ROW(A1), ROW(A10)은 그냥 숫자 값이라서 콜론(:)으로 범위(참조)로 만들 수 없다. 

rand() 같은 게 있다는 걸 생각하면 셀에 꼭 값을 채워야 값을 참조할 수 있는 건 아닐 텐데...방법이 없을까?

결론부터 얘기하면 첫 번째 식이 식 자체로는 맞다. 그런데 수식을 입력 후 Enter가 아니라 Ctrl-Shift-Enter를 쳐서 array formula를 만들어야 계산이 된다.
   Ctrl-Enter도 아니고 Ctrl-Shift-Enter라니 거 너무 어려운 거 아니오?

SUM(1:10) 같이 간단하면 얼마나 좋아...(당연히 안 됨)
MATLAB 좀 베낄 생각 없음?

1+...+10을 했으면 원리합계 구하기는 그냥 응용하면 된다(...)



이 기능이 Excel 2003에도 이미 있었다고 한다. 진작 알았더라면...


  • Introducing array formulas in Excel

http://office.microsoft.com/en-us/excel-help/introducing-array-formulas-in-excel-HA001087290.aspx

No comments:

Post a Comment

창 핸들을 만드는 동안 오류가 발생했습니다

System.ComponentModel.Win32Exception was unhandled   MyForm w = new MyForm IntPtr handle = wnd.Handle;   // Exception occurs here class MyFo...