[]
수식은 상수 값이나 셀 참조를 참조할 수 있습니다. 참조된 셀 중 하나의 값이 변경되면 수식의 결과도 변경됩니다. 만약 셀 참조 대신 수식에 상수 값을 사용하면, 수식이나 수식 내 값이 수정되지 않는 한 결과는 변경되지 않습니다.
SpreadJS에서는 formulaToRanges 메서드를 사용하여 특정 셀 범위를 수식 문자열로 변환할 수 있습니다. 예를 들어, 행과 열 번호에서 "A1" 주소를 반환할 수 있습니다.
수식에서 셀 참조 사용에 대한 자세한 내용은 셀 참조 사용을 참조하세요.
새로운 행이 수식의 셀 범위 앞이나 뒤에 추가되면, 범위에는 새로운 행이 포함되지 않습니다.
다음 주제에서는 다양한 표기법 스타일과 참조 유형에 대해 설명합니다.
A1 표기법
R1C1 표기법
상대 참조와 절대 참조
각 셀은 열 문자(A부터 Z, 그 후 AA부터 ZZ, AAA부터 ZZZ 등)와 행 번호(1부터 시작)의 조합으로 참조할 수 있습니다. 총 2,147,483,648개의 행과 열이 가능합니다. 예를 들어, D50은 D열과 50번째 행이 만나는 셀을 참조합니다. 셀 범위를 참조하려면 범위의 왼쪽 상단 셀의 참조를 입력하고, 콜론(:)을 추가한 후 범위의 오른쪽 하단 셀의 참조를 입력합니다.
각 셀은 행과 열 번호로 참조할 수 있으며, 각 번호 앞에 "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]C
는 R[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일 때도 계산할 수 있습니다.