배열수식

이미지
지난번 엑셀 강좌의 마지막은 배열수식으로 하려 했습니다만, 저도 잘 모르고, 이것을 실제 써 먹을 수 있는 일이 얼마나 있을까해서 망설였습니다.  그러다 뜻밖에 시간이 나게 된 오늘 배열수식에 대해 잠시 알아보는 시간을 가질까 합니다. 위 그림은 연이율5%일때 빌린 돈(원금)의 액수와 빌린 기간(햇수)에 따른 이자를 계산해주는 표입니다.  원금X햇수X이율  하면  총 지불해야할 이자가 나오겠지요? 그런데 이 수식을 c3셀에 넣고 아래로 끌기하면 그 아래 셀에서는 0으로 나옵니다. 오, 그럼 이자를 지불하지 않아도 되는 건가요? ㅋㅋ C6셀을 클릭해보시면 끌어채우기를 하면서 수식이 변경된 것을 알 수 있습니다. 지난 번에 살펴보았던 대로, 절대주소와 상대주소를 적절히 사용하여 수식을 다시 써보면,  위와 같이 됩니다. 햇수는 가로로 변하고(C,D,E...) 세로는 2열에서 변하지 않아야 하므로  C$2 와 같이 써야하고 원금은 세로로 변하고 (1,2,3..) 가로는 B열에서 변하지 않아야 하므로  $B3 과 같이 써야합니다. 이율은 항상 B1을 가리키야하기 때문에  $B$1 과 같이 써야합니다. 그런데, 상대주소와 절대주소가 아무래도 헷갈립니다. 생각을 잘 하셔야지, 틀리기 쉽습니다.  이제 배열수식을 이용하는 방법을 살펴보겠습니다. 값을 구할 범위 전체를 선택하고, 등호(=)를 입력하여 수식을 다음과 같이 입력합니다. 그리고 CTRL+SHIFT+ENTER를 누릅니다. 선택했던 모든 셀에 값이 입력되고, 수식창을 보시면 입력한 수식의 앞뒤에 중괄호({})표시가 들어가 있는 것을 볼 수 있습니다. 이 중괄호 표시가 바로 이 수식은 배열수식으로 입력되었다는 것을 말해주는 표시입니다.  배열수식은 반드시 CTRL+SHIFT+ENTER를 눌러야 제대로 동작합니다 . 배열수식의 특징은 어느 셀에서나 수식이 같다는 것입니다. E7셀을 클릭해보시면,C3셀에 들어있는 수식과 똑같은 수식이라는

엑셀함수 스페셜 - VLOOKUP함수를 이용해 구간별 값 찾기

이미지
점수를 구간으로 나누어 각 구간마다 등급을 매기고 싶을 때가 있습니다.  지난번에 소개한 것처럼  사용자정의함수를 이용하는 방법 도 있습니다만, 좀 더 간단한 방법을 보여드리려고 합니다. 바로 vlookup 함수를 사용하는 방법입니다.  VLOOKUP함수의 구문중 다음 주의사항을 한번 보시죠. VLOOKUP ( lookup_value , table_array , col_index_num ,range_lookup) range_lookup   정확하게 일치하는 값을 찾을 것인지, 근사값을 찾을 것인지를 결정하는 논리값입니다. TRUE이거나 생략되면  정확한 값이나 근사값을 반환합니다.  정확하게 일치하는 값이 없으면 lookup_value보다 작으면서 그 다음으로 가장 큰 값을 반환합니다 . table_array의 첫 번째 열 값은  오름차순으로 정렬해야 합니다 .  그렇지 않으면 VLOOKUP 함수를 실행하여 올바른 결과를 얻을 수 없습니다.  오늘 할 일은 위의 주의사항중 밑줄친 부분의 내용을 이용하는 것입니다. 위 그림과 같이 학생들의 성적이 있고, 각 성적에 따른 등급을 매기고 싶습니다.  지난번의 글 에서 제시한 상황과 같습니다. 이때, 다른 시트나 빈 공간아무곳에나 오른쪽과 같은 등급표를 작성합니다. 왼쪽의 숫자는  각 등급의 최소값 을 보여줍니다. 즉, 오른쪽의 등급표의 의미는  0~49점은 F,  50~59점은 E,  60~69점은 D,  70~79점은 C,  80~89점은 B,  90점 이상은 A라는 의미입니다. 그리고 학생들의 등급이 들어가는 셀의 수식을 다음과 같이 입력합니다.  =VLOOKUP(B2,$F$3:$G$8,2) 그러면 각 성적에 따라 등급이 매겨졌습니다. VLOOKUP함수의  마지막 인수를 TRUE로 주거나 생략했을때 작거나 같은 값을 찾는다는 성질 을 이용한 것입니다.  사용자정의 함수를 쓰지 않아도 되니 편합니다. 위에 설명한 두 가지만 주의하시면 됩니다. 한번 더 설명하면,  1.

[함수추가] INDEX함수 : 범위속에서 지정한 만큼의 위치에 있는 값 [오른쪽 열 기준으로 왼쪽열을 찾을때 (VLOOKUP함수의 반대 방향)]

이미지
INDEX함수가 상당히 자주 쓰이는 유용한 함수인데 작년에 빠뜨려서 이번에 보충합니다.  엑셀 도움말에는 다음과 같이 되어있습니다. INDEX ( array ,row_num,column_num) array     배열 상수나 셀 범위입니다. 배열에 행이나 열이 하나만 있을 때는 row_num이나 column_num 인수를 생략할 수 있습니다. 배열에 행과 열이 두 개 이상 있을 때 row_num이나 column_num만 사용하면 배열의 전체 행이나 열이 하나의 배열로 반환됩니다. row_num     값을 반환할 배열의 행을 선택합니다. row_num을 생략하면 column_num을 지정해야 합니다. column_num     값을 반환할 배열의 열을 선택합니다. column_num을 생략하면 row_num을 지정해야 합니다. 주의 row_num과 column_num 인수를 모두 사용하면 row_num과 column_num이 교차하는 셀의 값이 반환됩니다. row_num이나 column_num을 0으로 설정하면 전체 열이나 전체 행에 대한 값의 배열이 각각 반환됩니다. 배열로 반환된 값을 사용하려면 행에 대한 가로 셀 범위와 열에 대한 세로 셀 범위에 INDEX 함수를 배열 수식 (배열 수식: 하나 이상의 값 집합에 대해 여러 가지 계산을 수행하고 하나 또는 여러 개의 결과를 반환하는 수식입니다. 배열 수식은 중괄호 { } 안에 표시되고 Ctrl+Shift+Enter를 눌러 입력합니다.)으로 입력합니다. 배열 수식을 입력하려면 Ctrl+Shift+Enter를 누릅니다. row_num과 column_num은 반드시 배열에 있는 셀이어야 합니다. 그렇지 않으면 #REF! 오류 값이 반환됩니다. INDEX함수에는 사실, 배열형과 참조형이 있으며, 위의 도움말은 배열형에 대한 설명입니다. 하지만, 참조형을 지금 알 필요는 없을 듯하여 배열형만을 설명하겠습니다. 당분간은 INDEX함수를 쓰실때 다음 그림처럼 배열형이나 참조형중에 선택

1일1함수 (47) COMBIN, PERMUT 함수 : 순열과 조합의 수

permutation : 순열 combination : 조합 에서 따온 이름들입니다. 수학시간에 다들 배우신 기억이 날 것입니다. 로또 1등 당첨확율은 얼마일까요? 답은 "1에서 45까지의 공이 있는데, 그 중에 6개의 공을 무작위로 꺼낼때 만들 수 있는 조합의 수"분의 1입니다. 실제로 계산하려면 45!/(45-6)!을 계산해야하므로, 매우 복잡할 것처럼 보입니다만, =COMBIN(45,6) 와 같이 간단하게 수식을 만들수 있으며, 답은 8,145,060 입니다. 로또 1등 당첨 확율이 8백만분의 1이 넘는다더니 정말이군요^^ 순열은 공을 꺼내는 것 뿐만 아니라 꺼낸 공을 배열하는 경우까지 따지므로, 그 값이 더 커지게 됩니다. =PERMUT(45,6) 의 결과값은  5,864,443,200 입니다. 50억이 넘는 숫자이군요. 추억의 수학문제입니다^^;  공이 다섯개가 있고, 공 하나에 1에서 5까지의 숫자중 하나가 쓰여져 있습니다. 5개의 공 중에서 무작위로 2개의 공을 꺼낼때 만들 수 있는 숫자의 개수는 모두 몇 개일까요? 예를 들어, 1과 2를 꺼냈다면, 12와 21이라는 숫자를 만들 수 있습니다. 수식과 결과값을 표시해 보세요. 재미로 보는 엑셀함수였습니다.^^ 2009/03/20 - [컴퓨터/엑셀] - 1일1함수(4): 계승(팩토리얼)을 구하자 FACT()함수

1일1함수 (46) RAND, RANDBETWEEN함수 : 난수발생시키기

이미지
엑셀 2003에서 사용하던 난수 발생함수로 RAND함수가 있습니다. 인수가 필요없이 RAND()라고 입력하기만하면, 0에서 1사이의 실수를 반환합니다. 그래서 80과 100사이의 정수를 난수로 발생시키려면 다음과 같은 수식을 사용했습니다. =INT(RAND()*(100-80)+80) 수식을 분석하면, RAND()부분에서는 0에서 1사이의 실수가 반환되고 거기다 20을 곱하면 0과 20 사이의 실수가 됩니다. 거기다 80을 더하면 80과 100사이의 실수가 되고 그 값에 INT함수를 적용시키면 80과 100사이의 정수가 됩니다. 참고: INT함수는 가장 가까운 정수로 내림하는 함수입니다. INT(8.9) = 8 INT(-8.9) = -9  그런데, 엑셀2007에서는 이렇게 복잡하게 할 필요없이 RANDBETWEEN함수를 사용하면 됩니다.  80에서 100사이의 난수를 발생시키는 수식은 다음과 같습니다. =RANDBETWEEN(80,100) RAND함수를 이용하는 예를 하나 보여드리겠습니다. 학생들을 번호순이 아니라 무작위로 섞은 새로운 순번을 부여하고 싶습니다.  C열에는 RAND함수를 이용해서 난수를 발생시키고 D열에는 생성된 C열의 난수값으로 순번을 매기는 함수를 넣습니다. =RANK(C2,$C$2:$C$11) 그런데 해보시면 아시겠지만, RAND함수는 셀에 변화가 있을때마다 난수값을 새로 발생시킵니다 . 엔터하나만 쳐도 전체 셀의 값이 달라지는 겁니다. 그래서 지금 발생시킨 난수 및 순번을 그대로 고정시켜야합니다. 셀의 전체 범위를 선택하여 복사하신후, 같은 셀범위에 오른쪽 클릭하여 선택하여 붙여넣기를 실행하면 창이 뜹니다. 여기서 "값"을 선택하고 확인하면 이제는 난수가 더이상 새로 생성되지 않고 셀값이 고정됩니다. 아까 RAND함수가 들어있던 C열을 클릭해보면 RAND함수가 아니라 0에서1사이의 실수가 들어있습니다. 혹시라도

1일1함수 (45) ROUND함수 : 반올림, 올림, 내림

이미지
숫자를 반올림, 올림, 내림하는 함수 ROUND입니다. 구문 ROUND(number, num_digits) ROUND 함수 구문에는 다음과 같은 인수가 사용됩니다.     number 반올림할 숫자로서 필수 항목입니다.     num_digits number 인수를 반올림할 자릿수로서 필수 항목입니다. 주의     num_digits가 양수이면 number를 지정한 소수점 아래 자릿수로 반올림합니다.     num_digits가 0이면 number를 정수로 반올림합니다.     num_digits가 음수이면 number를 지정한 소수점 위 자리에서 반올림합니다.      항상 반올림하려면 ROUNDUP 함수를 사용합니다.     항상 반내림하려면 ROUNDDOWN 함수를 사용합니다.     숫자를 특정 배수(예: 가장 가까운 0.5로 반올림)로 반올림하려면 MROUND 함수를 사용합니다. 소수점 아래 자리에서 반올림을 지정하려면 양수를, 소수점 위자리에서 반올림하려면 음수를 쓴다는 것을 주의해야겠습니다. 밑줄친 부분에서 알 수 있듯이, 올림과 내림에 해당하는 함수는 ROUNDUP, ROUNDDOWN입니다.

1일1함수 (44) SUBTOTAL함수 : 부분합구하기

이미지
부분합은 저도 잘 모르기 때문에, 아는 것만 설명 드리겠습니다. 더 자세히 아시는 분은 보충 설명 부탁드립니다. 일단 도움말부터 보시겠습니다. 구문 SUBTOTAL ( function_num ,  ref1 , ref2, ...) function_num   목록에서 부분합을 계산하는 데 사용할 함수를 지정하며 1에서 11(숨겨진 값 포함) 사이 또는 101에서 111(숨겨진 값 무시) 사이의 값입니다. function_num (숨겨진 값 포함) function_num (숨겨진 값 무시) 함수 1 101 AVERAGE 2 102 COUNT 3 103 COUNTA 4 104 MAX 5 105 MIN 6 106 PRODUCT 7 107 STDEV 8 108 STDEVP 9 109 SUM 10 110 VAR 11 111 VARP ref1, ref2   부분합을 계산할 참조 또는 범위로서, 1개에서 254개까지 지정할 수 있습니다. 주의 ref1, ref2,... 안에 다른 부분합이 있으면, 즉 중첩된 부분합이면 이중으로 계산되는 것을 피하기 위해 중첩된 부분합을 무시합니다. function_num 상수가 1에서 11 사이인 경우 SUBTOTAL 함수는  홈  탭의  셀  그룹에서  서식  명령의  숨기기 및 숨기기 취소  하위 메뉴에 있는  행 숨기기  명령으로 숨겨진 행의 값을 포함합니다. 목록에서 숨겨진 값과 숨겨지지 않은 값의 부분합을 구할 때 이러한 상수를 사용하십시오.  function_num 상수가 101에서 111 사이인 경우 SUBTOTAL 함수는 행 숨기기 명령으로 숨겨진 행의 값을 무시합니다.  목록에서 숨겨지지 않은 값의 부분합만 구할 때 이러한 상수를 사용하십시오. 사용하는 function_num 값에 관계없이 SUBTOTAL 함수는 필터 결과에 포함되지 않은 행을 모두 무시합니다 . S