[]
        
(Showing Draft Content)

수식 내 셀 참조

수식은 상수 값이나 셀 참조를 참조할 수 있습니다. 참조된 셀 중 하나의 값이 변경되면 수식의 결과도 변경됩니다. 만약 셀 참조 대신 수식에 상수 값을 사용하면, 수식이나 수식 내 값이 수정되지 않는 한 결과는 변경되지 않습니다.

SpreadJS에서는 formulaToRanges 메서드를 사용하여 특정 셀 범위를 수식 문자열로 변환할 수 있습니다. 예를 들어, 행과 열 번호에서 "A1" 주소를 반환할 수 있습니다.

수식에서 셀 참조 사용에 대한 자세한 내용은 셀 참조 사용을 참조하세요.

새로운 행이 수식의 셀 범위 앞이나 뒤에 추가되면, 범위에는 새로운 행이 포함되지 않습니다.

다음 주제에서는 다양한 표기법 스타일과 참조 유형에 대해 설명합니다.

  • A1 표기법

  • R1C1 표기법

  • 상대 참조와 절대 참조

A1 표기법

각 셀은 열 문자(A부터 Z, 그 후 AA부터 ZZ, AAA부터 ZZZ 등)와 행 번호(1부터 시작)의 조합으로 참조할 수 있습니다. 총 2,147,483,648개의 행과 열이 가능합니다. 예를 들어, D50은 D열과 50번째 행이 만나는 셀을 참조합니다. 셀 범위를 참조하려면 범위의 왼쪽 상단 셀의 참조를 입력하고, 콜론(:)을 추가한 후 범위의 오른쪽 하단 셀의 참조를 입력합니다.

R1C1 표기법

각 셀은 행과 열 번호로 참조할 수 있으며, 각 번호 앞에 "R"은 행을, "C"는 열을 나타냅니다. 예를 들어, R1C3은 첫 번째 행과 세 번째 열에 있는 셀을 참조합니다.

A1 표기법

R1C1 표기법

설명

B12

R12C2

두 번째 열(B열)과 열두 번째 행(12번째 행)에 있는 셀

D14:D48

R14C4:R48C4

네 번째 열(D열)과 14행에서 48행까지의 셀 범위

E16:H16

R16C5:R16C8

16번째 행과 5열(E열)에서 8열(H열)까지의 셀 범위

A25:E70

R25C1:R70C5

첫 번째부터 다섯 번째 열(A열부터 E열)과 25행에서 70행까지의 셀 범위

상대 참조와 절대 참조

상대 셀 참조는 수식이 있는 셀의 위치를 기준으로 다른 셀을 참조하는 방식입니다. 반면 절대 참조는 시트에서 셀의 정확한 위치를 기준으로 항상 동일한 셀을 참조하며, 현재 셀의 위치와는 관계없습니다.

상대 참조는 복사할 때 자동으로 조정되며, 절대 참조는 그렇지 않습니다. 위젯은 절대 또는 상대 셀 참조를 사용할 수 있습니다. 각 시트에 대해 셀 참조 스타일을 ReferenceStyle 속성을 사용하여 정의할 수 있습니다. 수식은 절대와 상대 행 또는 열 참조를 동시에 포함하는 범위 참조를 지원하지 않습니다. 즉, 범위 참조에서 시작 행과 끝 행이 일치해야 하며(둘 다 절대 참조이거나 둘 다 상대 참조여야 함) 합니다. 다음 표는 수식에서 유효한 상대 셀 참조 예시를 포함하고 있습니다.

수식

설명

SUM(A1:A10)

첫 번째 열에서 1행부터 10행까지의 합

PI( )*C6

셀 C6의 값에 파이를 곱한 값

(A1 + B1) * C1

첫 번째 두 셀의 값을 더한 후, 그 결과에 세 번째 셀의 값을 곱한 값

IF(A1>5, A1*2, A1*3)

셀 A1의 내용이 5보다 큰지 확인한 후, 그렇다면 A1의 값을 2배하고, 그렇지 않으면 A1의 값을 3배하는 수식

A1 표기법에서 절대 참조를 나타내기 위해 행이나 열(또는 둘 다) 앞에 달러 기호($)를 사용합니다. 예를 들어, \$A\$1은 A1 셀을 절대 참조하는 방식입니다.

A1 셀 참조

설명

$A$1

첫 번째 열 절대 참조, 첫 번째 행 절대 참조

$A1

첫 번째 열 절대 참조, 첫 번째 행 상대 참조

A$1

첫 번째 열 상대 참조, 첫 번째 행 절대 참조

A1

첫 번째 열 상대 참조, 첫 번째 행 상대 참조

R1C1 표기법에서는 행 또는 열 번호(또는 둘 다) 주위에 대괄호 [ ]를 사용하여 상대 참조를 나타냅니다. 예를 들어, [R1]C1은 첫 번째 행을 상대 참조하고, R1[C1]은 첫 번째 열을 상대 참조하는 방식입니다.

R1C1 셀 참조

설명

R1C1

첫 번째 행 절대 참조, 첫 번째 열 절대 참조

R1C[1]

첫 번째 열 상대 참조, 첫 번째 행 절대 참조

R[1]C1

첫 번째 행 상대 참조, 첫 번째 열 절대 참조

R[1]C[1]

첫 번째 행 상대 참조, 첫 번째 열 상대 참조

R[-1]C[-1]

첫 번째 행 상대 참조 -1, 첫 번째 열 상대 참조 -1

이 표기법에서 대괄호 안의 숫자는 현재 셀로부터의 오프셋을 나타냅니다. 이 숫자는 음수, 양수 정수 또는 0일 수 있습니다. 오프셋을 완전히 생략하는 것은 0 오프셋을 나타내는 축약된 방법입니다. 따라서,

RC2는 R[0]C2와 동일합니다.

R[3]CR[3]C[0]와 동일합니다.

동적 참조

SpreadJS는 계산 관련 수식 함수를 사용할 때 최소한의 메모리 사용과 더 나은 성능을 지원하기 위해 dynamicReferences 플래그를 제공합니다. 이 플래그를 사용하면 워크시트 간 수식을 사용한 계산 과정이 더 빨라집니다.

dynamicReferences 플래그는 Boolean 값을 받아 CalcEngine에 대한 동적 참조 모드를 활성화하거나 비활성화합니다. 이 플래그는 IF, CHOOSE, SUMIF, SUMIFS, AVERAGEIF, AVERAGEIFS, MAXIFS, MINIFS, COUNTIFS, VLOOKUP, HLOOKUP과 같은 수식 함수의 성능을 향상시키는 데 도움을 줍니다.

기본적으로 dynamicReferences 플래그의 값은 true입니다. 계산 성능을 향상시키려면 이 플래그를 false로 설정해야 합니다.

참고: dynamicReferences 플래그는 수식을 설정하거나 fromJSON을 호출하기 전에 설정해야 합니다.

다음 코드 스니펫은 dynamicReferences 옵션을 false 또는 true로 설정했을 때 순환 참조가 어떻게 영향을 받는지 보여줍니다.

spread.options.dynamicReferences = false;
spread.options.iterativeCalculation = false;
sheet.setFormula(0, 1, '=SUMIF(A:A,"a*",B:B)');
sheet.setValue(1, 0, "aaa");
sheet.setValue(1, 1, 123); // 여기서, B1의 수식 결과는 변경되지 않습니다. 왜냐하면 B1은 A:A, B:B의 리스너를 가지고 있고, 이는 순환 참조이며 iterativeCalculation이 false로 설정되어 있기 때문입니다.

spread.options.dynamicReferences = true;
spread.options.iterativeCalculation = false;
sheet.setFormula(0, 1, '=SUMIF(A:A,"a*",B:B)');
sheet.setValue(1, 0, "aaa");
sheet.setValue(1, 1, 123); // 여기서, B1의 수식 결과는 변경됩니다. B1은 A:A와 B2의 리스너를 가지고 있으며, B:B가 아니기 때문에 순환 참조가 아니며, iterativeCalculation이 false일 때도 계산할 수 있습니다.