1. 정의
텍스트 문자열로 지정된 참조를 참고해서 그 결괏값을 반환합니다.
2. 구문
INDIRECT(ref_text, [a1])
- ref_text : ① 이름관리자에서 참조 대상으로 정의된 이름 또는 ② 셀에 대한 참조를 나타내는 문자열
- a1 : 선택 요소로 A1 형식이거나 R1C1 형식을 지정. 생략하면 일반적으로 사용하는 A1형식이므로 생략하고 사용하는 것이 편리함
3. 값 자체를 반환하는 경우와 비교
(셀 주소 형식)
아래와 같이 A1셀에는 15, A2셀에는 text, A3셀에는 a1이 입력되어 있을 때
=a1, =a2, =a3라고 하면 셀에 들어 있는 값이 반환되는데 비해서
=indirect(a3)라고 하면 a3에 들어있는 a1 셀주소를 참고해서 A1셀의 값 15를 반환합니다.
(이름)
A3셀을 선택하고, Formulas(수식) - Name Manager(이름 관리자)를 클릭한 다음, Name Manager(이름 관리자) 창에서 New(새로 만들기)를 클릭합니다.
New Name(새 이름) 창에서 Name(이름)에는 Cell_A3라고 입력하고, Scope(범위)는 넘어가고, Comment에 A3셀이라고 입력한 다음 Refers to(참조 대상)에 =Sheet1!$A$3이라고 되어 있으므로 넘어갑니다. 만약 다른 셀이라면 A3셀을 클릭해서 수정합니다. 셀 주소 형식은 절대 참조 형식이어야 합니다.
아래 OK(확인) 버튼을 누릅니다.
그러면 Name Manager 창이 다시 열리는데, 목록에 Cell_A3가 표시되고, Value는 a1, Refers To에 =Sheet1!$A$3, Scope는 Workbook, Comment는 A3 셀이라고 표시됩니다. 오른쪽 아래 Close(닫기) 버튼을 누릅니다.
그리고, E2셀에 =cell_a3라고 입력하는데 =cell까지 입력하면 Cell_A3가 표시되므로 탭 키를 눌러 입력해도 됩니다.
A3셀의 값 a1이 표시되는데,
=indirect(cell_a3)라고 입력하면 A1셀의 값 15가 반환됩니다.
이와 같이 셀의 값을 반환하는지, 아니면 셀 값이 참조하는 셀의 값을 반환하느냐가 =과 =indirect함수의 차이점입니다.
4. 오류 메시지
셀 값이 셀 주소를 가리키지 않는 경우 #REF! 에러가 발생합니다.
가. 에러가 발생하는 경우
아래와 같이 D4셀에 =indirect(a1)이라고 입력하면 A1셀이 셀 주소 형식이 아니므로 #REF! 에러가 발생합니다.
나. 에러가 발생하지 않는 경우
Sheet2에 아래와 같은 데이터가 있을 경우
Sheet1의 D6셀에 =INDIRECT(Sheet2!A3)라고 입력하면 마찬가지로 Sheet2의 A3 셀 값이 a2이므로 A2셀의 값 text2를 반환할 것 같은데, text를 반환합니다. 이것은 Sheet2의 a2셀에 Sheet2!가 없으므로 현재 시트인 Sheet1의 a2셀 값을 표시하는 것입니다.
따라서, Sheet2의 A3의 값을 Sheet2!a2라고 수정해야 합니다.
Sheet1으로 이동해서 D5셀의 값을 확인하면 text2 맞습니다.
5. 기타 예제
가. 셀 주소를 큰따옴표로 감싸는 경우
셀 주소를 큰따옴표로 감싸서
=indirect("a3")라고 입력하면 A1셀의 값 15가 반환되지 않고, a1이라고 셀 값이 반환됩니다.
나. 시트명을 큰따옴표로 감싼 경우
시트명을 큰따옴표로 감싸지 않는 것이 맞는데,
큰따옴표로 감싸도 indirect 값으로 반환됩니다.
그러나 문자열이므로 셀 주소와 결합하려면 &(결합) 연산자를 사용해야 합니다.
=INDIRECT("Sheet1!"&A3)
다. 시트명과 셀 주소의 연결
해당 시트의 셀 주소를 지정할 때는 시트명과 셀 주소 사이에 !를 삽입합니다.
따라서, A4셀처럼 !가 있으면 =INDIRECT(A4&A3)라고 입력할 수 있고,
A5셀처럼 !가 없다면 =INDIRECT(A5&"!"&A3)라고 중간에 !를 넣어서 셀 주소를 결합해야 합니다.
라. 통합문서와 연결
다른 통합문서와 연결할 때는 다른 엑셀파일명을 대괄호([ ])사이에 넣고, 그다음에 시트명!셀주소 식으로 입력합니다.
① 다른 통합문서 연결하기
㉮ 통합문서가 열리지 않은 상태
엑셀 파일명뿐만 아니라 폴더명까지 지정하고, 폴더명부터 엑셀 파일명, 시트명까지 작은따옴표로 감쌉니다.
따라서, 수식은 =INDIRECT('D:\data\excel\[indirect_function1.xlsx]Sheet1'!A3)이 됩니다.
그런데, Microsoft 사이트의 설명과는 달리
indirect_function1.xlsx가 아래와 같이 열려 있지 않아도 에러가 발생하지 않습니다.
아래는 indirect_function1.xlsx가 열린 경우입니다.
㉯ 다른 통합문서가 열린 상태
다른 통합문서가 열린 경우는
폴더명이 아래와 같이 사라지고, 작은따옴표도 없어집니다.
=INDIRECT([indirect_function1.xlsx]Sheet1!A3)
② 다른 통합문서명을 잘못 지정한 경우
그러나, =INDIRECT([indirect_function1]Sheet1!A3)와 같이 엑셀 파일명에 확장자 xlsx를 붙이지 않고 셀 주소까지 입력하면
아래와 같이 "파일이 어디에 있는지 지정하라"라고 파일 탐색기 참이 열리는데, 해당 파일을 선택하면 문제없이 15란 값이 반환됩니다.
그러나, Cancel을 누르거나 Esc키를 눌러서 파일명을 지정하지 않으면 아래와 같이 #REF! 에러가 발생합니다.
'Excel' 카테고리의 다른 글
@ 연산자 - 동적 배열을 단일 값으로 변환 (0) | 2023.03.30 |
---|---|
indirect 함수(2) - 누적값 계산 하기 (0) | 2023.03.28 |
Lambda 함수를 이용한 일정 간격의 값 합계 구하기 (0) | 2023.03.23 |
Let 함수 - 변수에 값 할당 및 수식 계산 (0) | 2023.03.22 |
일정한 간격으로 된 값 합계 구하기 - 배열 수식 (0) | 2023.03.17 |