HotXLS 문서

INDEX 영역 선택과 참조 식별

HotXLS 문서 · 계산 및 변환 충실도

버전 2.384.101은 INDEX(source,row_num,column_num,area_num)가 계산 배열에 대해 네 번째 인수를 받고, 정의된 이름과 LET를 통해 지원되는 실제 다중 영역 참조를 조합할 수 있도록 확장합니다. 행·열·영역 셀렉터는 함께 브로드캐스트될 수 있습니다

하나의 계산 배열 또는 여러 참조 영역

상수나 계산 배열은 하나의 소스 영역이므로 INDEX(SEQUENCE(2,2),2,2,1)은 4를 반환합니다. 네 번째 인수를 아예 생략해도 영역 1이 선택되지만, 명시적으로 비어 있는 네 번째 인수는 잘못된 영역 셀렉터입니다

참조 유니온은 같은 시트의 여러 실제 워크시트 영역을 담을 수 있습니다. area_num은 유니온 순서대로 영역을 고르고, 행·열 번호는 그 선택된 영역 안에서 적용됩니다

아래 예에서 Source!A1:B2는 {1,2;3,4}를 담고, Source!D1:E2는 {10,20;30,40}을 담으며, Other!A1:B2는 {100,200;300,400}을 담습니다

수식결과
INDEX((Source!A1:B2,Source!D1:E2),2,2,2)40, 스칼라 참조 결과를 유지합니다
SUM(INDEX((Source!A1:B2,Source!D1:E2),0,0,2))100, 두 번째 영역 전체를 더합니다
INDEX(SEQUENCE(2,2),0,0,1){1,2;3,4}, 계산된 값 배열입니다
INDEX(SEQUENCE(2,2),2,2,2)#REF!, 계산 배열에는 두 번째 영역이 없기 때문입니다

정의된 이름, LET, CHOOSE

식이 (Source!$A$1:$B$2,Source!$D$1:$E$2)인 지원되는 로컬 정의된 이름은 두 영역을 모두 유지합니다. 중첩된 이름도 이 식별을 유지하고, AREAS(NamedAreas)는 2를 반환합니다

INDEX(NamedAreas,2,2,2)는 40을 반환하고, ISREF(INDEX(NamedAreas,0,0,2))는 TRUE를 반환합니다. ROW, COLUMN, ROWS, COLUMNS와 집계 소비자는 계속 선택된 참조 좌표를 사용합니다

상대 참조 이름은 각 소비자 위치에서 해석되며, 워크시트 로컬 이름은 같은 철자의 통합 문서 스코프 이름보다 우선합니다. 참조 식별을 보존한다고 상대 이름이 첫 평가 위치에 고정되지는 않습니다

LET(areas,(Source!A1:B2,Source!D1:E2),INDEX(areas,2,2,2))
LET(areas,(Source!A1:B2,Source!D1:E2),ISREF(INDEX(areas,0,0,2)))

이 식들은 각각 40과 TRUE를 반환합니다. SEQUENCE(2,2)에 바인딩된 이름은 여전히 계산된 값 배열이며 참조 식별을 얻지 않습니다

실제 참조를 고르는 스칼라 CHOOSE는 선택된 참조를 유지합니다. 다른 시트의 선택도 포함입니다. INDEX(CHOOSE(2,Source!A1:B2,Other!A1:B2),2,2)는 400을 반환하고 해당 스칼라 참조 결과는 ISREF를 통과합니다

배열 셀렉터가 붙은 CHOOSE는 참조 영역의 유니온을 만드는 대신 셀렉터 방향에 따라 값을 조합합니다. CHOOSE({1,2},Source!A1:B2,Source!D1:E2)는 {1,20;3,40}을 반환하고, INDEX 영역 셀렉터 2를 추가해도 여전히 #REF!입니다

세 개의 셀렉터 배열

행·열·영역 셀렉터는 스칼라 값이나 배열을 받습니다. 하나뿐인 차원은 브로드캐스트되고, 서로 반대인 행·열 방향은 크로스 곱을 만들며, 방향이 같으면 위치끼리 짝을 이룹니다. 크기가 다른 배열의 짝 없는 위치에는 개별 #N/A 오류가 들어갑니다

INDEX((Source!A1:B2,Source!D1:E2),{1;2},2,{1,2})
INDEX((Source!A1:B2,Source!D1:E2),2,2,{2;1})

첫 식은 {2,20;4,40}을, 둘째 식은 {40;4}를 반환합니다. 선택된 값은 문자열, Boolean, 숫자, 타입이 지정된 오류 표현을 그대로 유지합니다

어느 셀렉터든 배열이면 결과는 참조가 아니라 값 배열입니다. 행이나 열의 0, 생략된 행·열 셀렉터는 각 결과 위치에서 해당 축의 첫 멤버를 고릅니다

스칼라 전용 추출과는 다릅니다. 스칼라 행·열 0 두 개는 선택된 영역 전체를 반환하지만, INDEX((Source!A1:B2,Source!D1:E2),0,0,{1,2})는 두 개의 중첩된 2×2 배열이 아니라 {1,10}을 반환합니다. 그 합은 11입니다

영역 강제 변환과 오류

영역 셀렉터는 소수 숫자 값을 0 방향으로 자르고 숫자 텍스트와 Boolean 값을 받습니다. 1.9, "1", TRUE는 모두 영역 1을 고릅니다

영역 0, FALSE, 명시적으로 비어 있는 네 번째 인수, 음수 값, 0으로 잘리는 소수는 #VALUE!를 반환합니다. 숫자가 아닌 텍스트도 #VALUE!이고, 사용 가능한 영역 수를 넘는 양의 영역은 #REF!를 반환합니다

타입이 지정된 셀렉터 오류는 기존 오류 코드를 유지한 채 전파됩니다. 배열 셀렉터에서 잘못된 영역은 자기 결과 위치에서만 오류를 만들므로, INDEX(SEQUENCE(2,2),2,2,{1,2})는 {4,#REF!}를 반환합니다

기존 오류가 뒤의 경계 검사로 대체되지는 않습니다. INDEX(#N/A,1,1,2)는 #N/A를 반환하고, INDEX(SEQUENCE(2,2),#N/A,1,#DIV/0!)는 행 셀렉터의 #N/A를 유지합니다

존재하는 로컬 워크시트로 한정된 잘못된 참조는 Source!#REF!와 'Plan! O''Brien'!#REF!를 포함해 #REF!로 남습니다. 그런 로컬 참조 오류를 담은 정의된 이름도 INDEX나 ISFORMULA에 전달되면 #REF!를 유지합니다

로컬 오류 토큰은 percent나 implicit-intersection 연산자와 함께 쓸 수 있고, 시트 구분자 뒤의 공백은 허용됩니다. 워크시트 이름과 구분자 사이의 공백은 허용되는 문법 밖입니다

"Source!#REF!" 같은 따옴표로 묶인 수식 문자열은 텍스트로 남습니다. 배열 상수 안의 워크시트 한정 참조 토큰은 지원되는 소스 문법 밖입니다

행·열 셀렉터는 기존 0 추출 규칙과 음수 값 검증을 유지합니다. 영역 0은 결코 소스 전체 추출을 뜻하지 않습니다

저장, 종속성, 한도

XLSX 자동 스필 계산은 셀렉터 배열 결과를 늘리거나 줄일 수 있고 앵커가 소유한 낡은 follower를 해제합니다. 지원되는 식은 명시적인 고정 CSE 대상 안에서도 평가되며 XLSX 저장과 다시 열기에서 살아남습니다

이름 붙은 셀렉터는 평가 결과가 스칼라여도 보수적인 동적 저장소를 요구할 수 있습니다. 한 셀짜리 동적 마커는 값이나 지원되는 참조 결과의 식별을 바꾸지 않습니다

선택된 소스 참조와 중첩 이름은 종속성 추적에 참여하므로, 재계산 뒤의 소스 편집도 반영됩니다. 셀렉터 순회와 생성된 행렬 페이로드는 기존 평가 단계 및 배열 메모리 예산을 소비합니다

경계

영역들이 서로 다른 시트에 속한 직접 유니온은 요청한 영역 번호가 그중 하나만 고르는 경우라도 #VALUE!를 반환합니다. 참조 하나를 고르는 스칼라 CHOOSE가 지원되는 교차 시트 대안으로 남습니다

계산 배열, 상수, 값 식의 유니온은 실제 다중 영역 참조가 아닙니다. LET에 바인딩된 계산 배열 유니온은 #VALUE!를 반환하고, 배열의 배열 유니온 문법은 소스 형태로 받지 않습니다

이 계약은 검증된 로컬 참조와 계산 배열 형태를 다룹니다. 모든 외부 참조 그래프, 참조 생성 함수, 임의의 중첩 배열 컨테이너를 지원한다는 뜻은 아닙니다

알 수 없는 워크시트 한정자는 알려진 로컬 참조 오류로 정규화되지 않습니다. Excel은 NoSuchSheet!#REF! 같은 수식에 외부 링크 그래프를 만들 수 있으며, 그 그래프를 맞추는 일은 이 로컬 계산 계약의 범위 밖입니다