rand(life)

1일1함수(6) : HLOOKUP 함수 -- 가로방향 데이터 목록에서 값 가져오기 본문

컴퓨터/엑셀

1일1함수(6) : HLOOKUP 함수 -- 가로방향 데이터 목록에서 값 가져오기

flogsta 2009. 3. 25. 19:50
오늘은 지난 번에 소개했던 VLOOKUP함수와 짝을 이루는 HLOOKUP함수를 다루겠습니다. VLOOKUP함수는 주어진 범위의 맨 첫"열"에서 값을 찾아, "오른쪽"으로 몇 번째에 있는 셀의 값을 구하는 것이었습니다.
HLOOKUP함수는 주어진 범위의 맨 첫"행"에서 값을 찾아, "아래쪽"으로 몇 번째에 있는 셀의 값을 구하는 함수입니다. 따라서, 셀전체의 열과 행을 바꾸어놓기만 하면 똑같은 일을 하는 함수이므로, 많은 점이 VLOOKUP함수와 유사합니다.

HLOOKUP(lookup_value,table_array,row_index_num,range_lookup)

lookup_value  테이블의 첫 행에서 찾을 값입니다. lookup_value는 값, 참조 또는 텍스트 문자열일 수 있습니다.

table_array  데이터를 찾을 정보 테이블입니다. 범위에 대한 참조나 범위 이름을 사용합니다.

row_index_num  반환하려는 값이 있는 table_array의 행 번호입니다.row_index_num이 1이면 table_array의 첫 번째 행의 값을, 2이면 두 번째 행의 값을 반환합니다.

range_lookup  HLOOKUP을 사용하여 정확하게 일치하는 값을 찾을지 아니면 근사값을 찾을지를 지정하는 논리값으로서, TRUE이거나 값을 생략하면 근사값이 반환됩니다. 즉, 정확하게 일치하는 값이 없으면 lookup_value보다 작은 값 중에서 가장 큰 값을 반환합니다. FALSE이면 정확하게 일치하는 값을 찾고, 해당하는 값을 찾지 못하면 #N/A 오류 값이 반환됩니다.

기타 주의할 사항들은 VLOOKUP함수와 동일합니다.



주어진 그림에서처럼, 급수에 따라 점수를 주게 되어있다고 합시다. 급수가 3급까지 밖에 없다면 IF문을 써서 간단히 할 수 있을 것입니다.

=IF(B2="1급",100,IF(B2="2급",95,82))

하지만, 급수가 더 많아져서 10급까지 있다면?  아니, 100급까지 있다면? 하루종일 IF문만 쓰고 있어야겠죠. 엑셀러가 그렇게 일을 하고 있으면 곤란하겠죠. 이때 HLOOKUP함수를 이용해서 간단히 처리합시다.

C2셀에 들어간 수식은 다음과 같습니다.

=HLOOKUP(B2,$B$10:$G$11,2,FALSE)

 =HLOOKUP  
 (B2,  B2셀의 값을(1급)
 $B$10:$G$11,  B10:G11의 범위중 첫행(10행)에서 찾아서
 2,  그 아래 한칸에 있는 값(100)을 구하되
 FALSE)  근사값이 아니라 정확한 값을 찾을것 (반드시 "1급"을 찾아야지, 2급이나 3급을 찾으면 안됨)



VLOOKUP함수에 비해서는 많이 알려져 있지도 않고, 활용도도 그다지 높지 않은것 같은데, 그이유는 위의 수식은 셀의 배열을 다음과 같이하면 VLOOKUP함수로도 만들수 있기 때문입니다.


그림에서처럼, 급수와 점수의 배치를 세로로 하면 VLOOKUP함수를 사용해도 똑같은 결과를 얻을 수 있습니다. 그런데 사람들이 엑셀을 사용할때 대개는 세로방향으로 표를 작성하는 경향이 있기때문에, 아무래도 HLOOKUP함수는 VLOOKUP함수보다 활용도가 떨어지는 것 같습니다.

2009/03/18 - [컴퓨터/엑셀] - 1일1함수(2) : VLOOKUP 세로방향 데이터 목록에서 값 가져오기