- 최초 작성일: 1999-10-06
- 최종 수정일: 2026-09-29
- 조회수: 27 회
- 작성자: 권현욱 (엑셀러)
- 강의 제목: DGET 함수
들어가기 전에
오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.
몇번째 강좌였는지 정확히 기억나진 않지만(20몇회 정도 된 것 같기도 하고…) vlookup()함수에 대해 설명을 드린 적이 있습니다. 또 생소하시지요? 한 것 같기도 하고 아닌 것 같기도 하고…
또 복습하지요 뭐.
DGET 함수
핵심 요약
- VLOOKUP은 첫 번째 일치 항목을 찾는 데 적합하지만 여러 조건을 동시에 적용하기에는 제약이 있습니다.
- DGET은 데이터베이스 범위·필드·조건 범위를 지정해 조건을 만족하는 하나의 레코드 값을 반환합니다.
- 조건 범위를 바꾸면 학력·급여액·입사일자처럼 같은 레코드의 여러 필드 값을 함께 조회할 수 있습니다.
아래와 같은 표가 있습니다.
| 제품코드 | 제품명 | 당월판매 | 누계판매 |
| 11065-0013 | 마몽드에버스킨 | 14,559 | 57,096 |
| 11065-0033 | 마몽드에버로션 | 19,712 | 72,667 |
| 11065-0063 | 마몽드에버아스트린 | 9,530 | 28,938 |
| 11065-0078 | 마몽드에버모크림 | 9,943 | 48,785 |
| 11066-0654 | 미스토픽코팅에센스 | 4,248 | 9,634 |
| 11066-1648 | 미스토픽스프레이3 | 19,728 | 49,564 |
| 11066-1649 | 미스토픽스프레이13 | 14,850 | 54,035 |
| 11066-1650 | 미스토픽스프레이23 | 24,223 | 44,227 |
| 11066-1654 | 미스토픽스프레이33 | 19,539 | 19,539 |
| 11066-1657 | 미스토픽트리트로션 | 410 | 4,710 |
| 11067-0751 | 미스쾌에버로션 | 10,202 | 29,176 |
| 11067-0757 | 미스쾌에버스킨 | 10,012 | 29,673 |
| 11090-0035 | 베리떼화로션 | 1,496 | 4,797 |
| 11090-0048 | 베리떼프레쉬마스크 | 230 | 14,600 |
| 11090-0075 | 베리떼UV화크림 | 1,739 | 17,000 |
| 11093-0869 | 레쎄UV그린2종 | 9,369 | 58,011 |
| 11097-0013 | 라네즈UV그소프너 | 19,000 | 52,533 |
| 11097-0024 | 라네즈아이리프팅시럼 | 9,985 | 14,478 |
이런 표가 있을 때, 제품코드만 탁 치면 제품명, 당월판매, 누계판매가 같이 표시된다면 편리할 때가 있겠지요? 즉 조견표와 같이 말입니다. 이런 기능을 수행하는 것이 vlookup()함수 입니다.
제품코드 조회
| 제품코드 | 11066-1648 | |
| 제품명 | 미스토픽스프레이3 | =VLOOKUP($C$33,$B$9:$E$26,2,FALSE) |
| 당월판매 | 19,728 | =VLOOKUP($C$33,$B$9:$E$26,3,FALSE) |
| 누계판매 | 49,564 | =VLOOKUP($C$33,$B$9:$E$26,4,FALSE) |
공식을 잘 들여다 보시면 이해가 가실 것입니다. 빨간 네모 친 부분만 바뀌었지요.
여기까지 설명을 드렸는데 작지만 날카로운 눈을 가진 어떤 분이 이런 질문을 해 오셨습니다.
"vlookup()함수는 조건을 만족하는 한 자료만 찾아주는 것이 아니냐? 두가지 이상의 조건을 입력 받아서 두가지 이상의 결과값을 동시에 리턴해 주는 방법은 없느냐?"는 질문을 말입니다.
물론 있습니다. Visual basic code를 짜면 더 쉽게 해결이 되겠지만 여기서는 엑셀의 함수를 사용해서 해결해 보도록 하지요.
아래의 예를 보세요
| 사원이름 | 소속 | 학력 | 급여액 | 입사일자 |
| 이순신 | 총무과 | 대졸 | 1,000,000 | 1995-01-01 |
| 김유신 | 마케팅실 | 대졸 | 1,500,000 | 1993-06-01 |
| 임걱정 | 판촉과 | 대졸 | 1,350,000 | 1994-01-30 |
| 강감찬 | 강남지점 | 대졸 | 950,000 | 1996-07-01 |
| 조물주 | 강서지점 | 고졸 | 900,000 | 1997-01-01 |
| 김찬팔 | 총무과 | 고졸 | 900,000 | 1995-03-01 |
| 돌팔이 | 강동지점 | 대졸 | 1,350,000 | 1994-10-15 |
| 최영 | 마케팅실 | 대졸 | 2,000,000 | 1990-01-01 |
| 안록산 | 강북지점 | 대졸 | 2,300,000 | 1988-10-01 |
| 사사명 | 복지과 | 대졸 | 18,000,000 | 1995-07-10 |
| 연개소문 | 구매과 | 고졸 | 800,000 | 1993-06-20 |
| 이순신 | 기획팀 | 대졸 | 1,250,000 | 1997-03-15 |
| 김유신 | 인사과 | 대졸 | 1,000,000 | 1993-06-01 |
| 김춘추 | 조달과 | 대졸 | 1,500,000 | 1990-06-20 |
| 관창 | 경리과 | 대졸 | 2,000,000 | 1989-06-30 |
표를 살펴보니 이순신, 김유신이라는 이름을 가진 사람이 각각 2명씩 있지요? 이런 경우에 vlookup()함수를 쓰면 어떻게 될까요? 맨 첫번째 조건을 만족하는 하나의 이름만 계속 찾게 되겠지요? 이것은 우리가 찾고자 하는 값과는 거리가 있는 것이고요.
그러므로 첫번째 조건과 두번째 조건을 동시에 만족하도록 하는 방법을 찾아야 할 것입니다.
요렇게 조건을 입력받으면
| 사원이름 | 이순신 |
| 소속 | 기획팀 |
이와 같은 결과를 얻고 싶다는 질문입니다. 즉 "어느 부서의 누구"까지를 함께 지정하여 원하는 자료를 검색하겠다는 것이지요.
| 학력 | 대졸 |
| 급여액 | 12,500,000 |
| 입사일자 | 1997-03-15 |
참고: 위 표의 급여액은 12,500,000으로 되어 있으나, 앞의 사원 표에서 기획팀 이순신의 급여액과 뒤에 나오는 DGET 결과는 모두 1,250,000입니다. 원문 그대로 두었으며 1,250,000의 오기로 보입니다.
아래의 방법으로 하시면 됩니다.
(1) 검색테이블을 일단 아래와 같이 만든 후 조건을 아래와 같이 입력합니다.
| 사원이름 | 소속 | 학력 | 급여액 | 입사일자 |
| 이순신 | 기획팀 |
(2) =dget까지 입력한 후 Ctrl + A키를 탁 치세요(오랜만에 사용하지요? 안 잊으셨을래나…)
대화상자가 나타나는데 보니까 세가지 인수로 구성되어 있지요?
① Database: 테이블 전체, 즉 소스 데이터 전체의 범위를 지정해 줍니다
② Field: 찾고자 하는 필드를 지정합니다.(여기서는 학력, 급여액, 입사일자 등)
③ Criteria: 검색조건을 지정해 줍니다. 즉 요부분이 되겠지요.
(3) 이렇게 해준 후 절대주소가 필요한 부분은 절대주소로 지정해 주고 공식을 아래로 복사하면 아래와 같은 결과가 나타나게 됩니다.
| 학력 | 대졸 | =DGET($B$49:$F$64,B105,$B$81:$C$82) | |
| 급여액 | 1,250,000 | =DGET($B$49:$F$64,B106,$B$81:$C$82) | |
| 입사일자 | 1997-03-15 | =DGET($B$49:$F$64,B107,$B$81:$C$82) |
검색조건 테이블만 하나 만들어 놓으면 원하는 데이터를 손쉽게 찾아낼 수가 있는 것입니다.
이 상태에서 조건 테이블의 조건만 바꾸어 주면 결과값도 연동되어 자동으로 변경됩니다.
즉 (1)의 검색테이블에서 소속을 총무과로 바꾸어 보세요(이순신이란 사람이 기획팀과 총무과에 각각 1명씩 있었지요?) 그러면 (3)의 결과값도 같이 변할 것입니다.
많은 분야에서 응용이 될 수 있을 것입니다. 완전히 이해하고 넘어가시도록…
참고로 dget()함수처럼 함수명 앞에 "d"가 붙는 것은 database용 워크시트 함수입니다.
데이터베이스용 워크시트 함수에는 이것 외에도 dcount(), dcounta(), dsum(), daverage(), dproduct(), … 등 여러가지가 있습니다.
정신없이 치다보니 하루치 분량치고는 좀 많네요…
정리 — DGET 함수
| 구분 | 내용 |
|---|---|
| 주제 | VLOOKUP으로 해결되지 않는 두 가지 이상의 조건 검색을 DGET 함수로 해결 |
| VLOOKUP | 제품코드를 입력하면 제품명, 당월판매, 누계판매를 조견표처럼 조회 |
| 한계 | 이름이 같은 사람이 있으면 맨 처음 조건을 만족하는 자료만 계속 찾게 됨 |
| DGET 인수 | Database는 표 전체 범위, Field는 찾고자 하는 필드, Criteria는 검색조건 |
| 조건 표 | 사원이름과 소속을 함께 지정하여 같은 이름의 사람을 구분 |
| 특징 | 조건 표의 조건만 바꾸면 결과값도 연동되어 자동으로 변경 |
| D 함수 | dcount, dcounta, dsum, daverage, dproduct 등은 데이터베이스용 워크시트 함수 |
자주 묻는 질문 (FAQ)
Q1. VLOOKUP 함수의 한계는 무엇인가요?
조건을 만족하는 한 자료만 찾아 주므로, 같은 이름을 가진 사람이 여러 명이면 맨 처음 조건을 만족하는 자료만 계속 찾게 됩니다.
Q2. 두 가지 조건을 동시에 만족하는 자료를 찾으려면 어떻게 하나요?
조건 표에 사원이름과 소속을 함께 입력하고 DGET 함수의 Criteria 인수로 지정합니다. DGET 함수는 Database, Field, Criteria의 세 인수로 구성됩니다.
Q3. 조건 표의 조건을 바꾸면 결과는 어떻게 되나요?
결과값도 연동되어 자동으로 바뀝니다. 예를 들어 소속을 기획팀에서 총무과로 바꾸면 총무과 이순신의 자료가 나타납니다.
마치며
같은 값이 여러 개 있는 표에서 정확한 자료를 찾아야 할 때는 DGET 함수와 조건 표의 조합을 활용해 보시기 바랍니다. VBA에 대한 기초 지식을 공부하실 분은 아이엑셀러 닷컴 사이트 상단 메뉴에서 [Excel 강의] - [Excel 입문]을 먼저 보시면 이해하기 쉽습니다.