안녕하세요. 

INDEX 함수로 검색하는 방법이 아주 빠르다고 해서 애용중입니다.

아래는 이 공식에 대한 실제의 예입니다.

=INDEX(A:A, 3) 
A열 전체 범위(A:A)에서 3번째 행에 있는 값을 가져옵니다

그런데 위보다 더 빠르게 할려면

A:A 처럼 하지 말고 A1:A9999 처럼 명확하게 범위를 지정하라고 인공지능이 대답해 주었습니다. 

인공지능에게 엑셀 최대행 갯수는? 이라고 질문하면 아래와 같이 대답해줍니다. 

엑셀에서 최대 행 갯수는?
최대 행 수: 1,048,576개 입니다.

이 말인 즉슨

=INDEX(A:A, 3)      --->  1,048,576번 검사한 후에 , 3번째 찾음. 

=INDEX(A1:A9999, 3)    --->    A1:A9999  이므로 9999번 검사한 후에 3번째 찾음. 

즉, 이런 논리라면 위 중에 무엇이 속도가 더 빠른 지는 금방 알 수 있겠네요. 후자가 더 빠르겠죠.

제 이해가 맞는지 아닌지는 모르겠지만, 이는 제가 질문할 사항이 아닙니다. 단지...

제 질문을 여러분들께 명확하게 이해시켜드릴려고(최대한 성의있게 질문드릴려고) 전채처럼 먼저 내온 음식같은 것이구요.

이제 드디어 질문드립니다. 

질문예제파일에 있는 기능은  위와 같이 

=INDEX(Sheet1!A$1:Sheet1!A$9999,A$1-1)
시트1 에 있는 1행~9999행 중에서 마지막 1 개행의 값을 가져오시오

이구요. 이것이 10개가 있으니 최정적으로 10개 행을 가져옵니다.

그 셀들이 하는 일을 도식화하여 설명드리면  

1 ~ 9999 번째 행 중에서 마지막 10번째
.
.
.
1 ~ 9999 번째 행 중에서 마지막 3번째
1 ~ 9999 번째 행 중에서 마지막 2번째
1 ~ 9999 번째 행 중에서 마지막 1번째

.....와 같습니다.  그런데 각 셀들은 저마다...

1 ~ 9999 번째 행 중에서  ........   

이 동일계산을 각각 셀마다 반복하고 있습니다. 고정된 것인데도요.  그러면 그러면 효율적이지 않잖아요.

윗행도 아랫행도 10개 행 모두가   [ 1 ~ 9999 번째 행 ] 을 검사하고 마지막 몇번째. 이런 식으로  [ 1 ~ 9999 번째 행 ] 이라는 과정이 고정되어 있어요. 

그 부분이 바로 아래 문구에 해당될 테구요. 

=INDEX(Sheet1!A$1  :  Sheet1!A$9999,     A$1-1  )     <-- 원래 수식. 이런 수식이 10개 있음. 

Sheet1!A$1 : Sheet1!A$9999 <--- 위 수식중 쓸데없이 반복중인 부분. 이 파일에서는 10번 반복중.

위 [ 쓸데없이 반복중인 부분 ] 을 [ 하나의 고정값 ]  으로 치환해버리고 싶습니다.  

이 파일에서는 어차피 10개의 행 모두가 [ 동일한 계산 ] 에 해당하잖아요. 동일하므로 1번만 하면 되는데 각 10개가 각자 하고 있으니 불필요한 행위라는거죠. 

그런데 문제는 [ 고정해야할 것 ] 이 [ 값이 아니라 범위] 라는 것이 문제입니다. 고정값 말고, 고정범위를 치환하는 방법을 모르겠습니다.

만약, 이게 숫자로 된 값이라면 ... 예를 들어 그 값이 32344 라는 특정 숫자라면  

[ 쓸데없이 반복중인 부분 ]   -   이걸 C1 에 저장 하면 

=INDEX(Sheet1!A$1 : Sheet1!A$9999, A$1-1 ) <-- 원래 수식

Sheet1!A$1 : Sheet1!A$9999 <--- 쓸데없이 반복중인 부분

C1     <--- 고정값으로 치환,   C1  = 32344  라면

=INDEX(     C1,     A$1-1   )   <-- 최종
= INDEX( 32344 , A$1-1 ) <-- 최종 ( 드디어 행 카운트 하지 않게 됨. 32344 번째 행. 고정됐으니까)

이렇게 되면 각각 셀들은 힘들게 [ 쓸데없이 반복중인 부분] 계산할 필요없게 되잖아요.

= INDEX( 32344 , A$1-1 )

위 셀수식을 엑셀이 해석/행동하는 입장에서 TV축구중계의 느린화면(슬로우모션) 처럼 자세히 살펴보면... 

이 셀에 도착해서 할일이 무엇인가 살펴보니... 

1. 이것은 셀에 = 이 있으므로 함수이다. 그리고 INDEX다. 그러면 INDEX 문법이 약속한대로 진행하면 되겟네. 

2. INDEX 의 첫째문구는 범위이다. 그 범위는 32344 부터 32344까지이다. 그러므로 1개만 있는 범위이므로 카운트고 뭐고 없이 그냥 32344 를 쳐다보기만 하고..

3. 그 다음동작으로 넘어간다.  그 다음 동작은  범위 다음에 쉼표  , 가 오고  이때부터  [ A$1-1 번째라는 것을 가져오는 것 ]  으로 해석한다.  그래서  A$1에 입력된 숫자에서 1을 빼면 [어떤 숫자] 가 나온다. 결국 내가 할 일은...

4.  32344 부터 32344까지 범위에서 그 [어떤숫자번 ] 째의 값을 이 셀에 반환한다. 

5. 이상 이 셀에서 내 할일은 마쳤다. 이제 다음 셀로 넘어간다.
.. .입니다.

위에서 INDEX라는 함수를 가장 시간잡아먹게 하는 곳이 범위를 카운트하는 위 2 의 과정이라고 생각합니다. 그런데 [ 32344 부터 32344까지 ] 라고 해주면 계산이고 말것도 없이 고정시켜 줘버리면 속도가 빨라지겟네요.
덧셈이고 뺄셈이고 연산이 아예 없고 범위를 카운트할 것도 없잖아요.

이런 식으로 치환하고 싶습니다. 그런데 고정값(Value)이 아닌 고정범위(Range)는 어떻게 치환하나요?  제 질문이 바로 이겁니다. 

질문 요약 : 

숫자처럼 고정된 값(Value)이면 특정셀(C1)에 넣고 C1 의 값을 참조하는 방식으로 치환시키면 효율적인데(아주 간단한데), 저렇게  값이 아니라, 범위(A1:A9999) 가 고정된 경우 어떻게 치환시킬 수 잇나요?  이게 가능하면 각 셀들은  A1~A9999 까지  9999번 카운트하지 않아도 되잖아요.  고정됏으니까요. 그러면 서두에 인공지능이 밝힌 바와 같이 행갯수를 카운트 하지 않아 결국 INDEX 속도향상을 꾀할 수 있잖아요. 만약 이런 셀이 10개 정도면 문제없다행도 1백만개 있다면 이는 큰 이슈가 되겠죠.

질문 1 : 그래서 이런 범위(Range)를 어떻게 고정으로 치환시킬 수 있는 지 질문드립니다. 엑셀은 너무 똑똑해서 분명히 이런 장치를 마련해놓았을텐데요. 

질문 2 : 그런 장치가 없다해도, 그런 장치에 버금가는 엑셀-테크닉적인 방법이 있을까요? ( 유사한 예: 문자열 "12345"를 숫자화시키는 건 함수를 몰라도 된다. 설령 그런 함수가 있다해도 우리는 테크닉적으로 "12345" * 1 을 곱해주어 숫자화시키는기술을 구사할 수 있다. 이런 건 엑셀교재에 나오지는 않지만 너무 흔하게 사용하는 주요테크닉이다. )

감사합니다.