9. 수식 [WinForms] 수식에 참조 사용하기
페이지 정보
작성자 GrapeCity 작성일 2021-10-27 17:24 조회 1,093회 댓글 0건본문
관련링크
수식은 다른 셀의 값을 참조할 수 있습니다. 예를 들어, 두 셀에 입력된 값의 합을 구하기 위해 수식은 행과 열로 된 셀 좌표를 참조합니다. 셀 참조시에는 ReferenceStyle 속성을 사용하여 참조 표기법을 설정할 수 있습니다.
표기법 |
설명 |
A1 |
열과 행 좌표로 문자와 숫자를 사용합니다. 절대 좌표에는 달러 표시($)를 사용합니다. |
R1C1 |
행 좌표 표시를 위해 'R'과 숫자를, 열 좌표 표시를 위해 'C'와 숫자를 사용합니다. 상대 좌표에는 대괄호 []를 사용합니다. |
아래 코드를 통해 참조 표기법을 설정 및 사용할 수 있습니다.
A1 표기법
fpSpread1.Sheets[0].ReferenceStyle = FarPoint.Win.Spread.Model.ReferenceStyle.A1; fpSpread1.Sheets[0].Cells[2, 2].Formula = "SUM(A1:A6)";
R1C1 표기법
fpSpread1.Sheets[0].ReferenceStyle = FarPoint.Win.Spread.Model.ReferenceStyle.A1; fpSpread1.Sheets[0].Cells[2, 2].Formula = "SUM(R1C1:R6C1)";
상대 참조
R1C1 표기법으로 상대 참조를 사용해 보겠습니다. 예를 들어, 셀 B2를 기준으로 B2의 왼쪽에 위치한 셀 A2의 상대 좌표는 RC[-1]입니다. 반면, B2의 오른쪽에 위치한 C2의 상대좌표는 RC[1]입니다. 아래 이미지와 같이 샘플 데이터가 입력되어있을 때, 상대 참조를 사용하여 셀 B2에 A2+B1을 계산하는 수식을 입력해보겠습니다.
ReferenceStyle 속성을 사용하여 R1C1 표기법을 설정합니다.
// 활성화된 시트의 참조 스타일을 상대참조로 설정합니다. fpSpread1.ActiveSheet.ReferenceStyle = FarPoint.Win.Spread.Model.ReferenceStyle.R1C1;
수식을 입력하는 셀을 기준으로 상대 좌표를 사용한 수식을 입력합니다. 예시 코드에는 셀 B2에 수식을 입력하고 있으므로, B2가 기준이 됩니다. 상대 좌표 RC[-1]는 기준 셀에서 왼쪽으로 한 열 이동한 셀 A2를 가리키며, 상대 좌표 R[-1]C는 기준 셀에서 위로 한 행 이동한 셀 B1을 가리킵니다. 따라서 B2에는 A2+B1의 결과값인 6이 표시됩니다.
// 셀 B2에 B2의 왼쪽 셀(B1)과 위쪽 셀(A2)의 합을 계산하는 수식을 입력합니다. fpSpread1.ActiveSheet.Cells["B2"].Formula = "RC[-1]+R[-1]C";
샘플을 다운로드하여 전체 코드를 확인해 보실 수 있습니다.
범위 참조
Spread는 범위 참조를 지원합니다. 이때 시작 행과 끝행이 동일한 참조 유형일수도 있고, 다른 참조 유형으로 구성될 수도 있습니다.
다음의 표는 R1C1 표기법에서 범위 참조의 몇가지 예를 설명합니다. 셀 범위 [A1:A10]에 1부터 10까지의 숫자가 입력되어있다고 가정하고, 셀 B10에 수식이 입력되어있다고 할 때, 결과 값을 계산해봅시다.
수식 |
설명 |
결과값 |
SUM(R1C[-1]:R5C[-1]) |
1행부터 5행까지의 합을 계산합니다. (절대 행 : 절대 행) |
15 |
SUM(R1C[-1]:RC[-1]) |
1행부터 기준행까지의 합을 계산합니다. (절대 행: 상대 행) |
55 |
SUM(RC[-1]:R5C[-1]) |
기준행부터 5행까지의 합을 계산합니다. (상대 행: 절대 행) |
15 |
SUM(R[-5]C[-1]:RC[-1]) |
기준행에서 윗방향으로 5번째에 있는 행부터 기준행까지의 합을 계산합니다. (상대 행 : 상대 행) |
45 |
열 전체 또는 행 전체를 참조하는 것도 가능합니다.
표기법 |
참조 |
설명 |
R1C1 |
C1:C2 |
1열부터 2열까지 열 전체를 참조합니다. |
R1C1 |
R1:R2 |
1행부터 2행까지 행 전체를 참조합니다. |
A1 |
$A:$B |
A열부터 B열까지 열 전체를 참조합니다. |
A1 |
$1:$2 |
1행부터 2행까지 행 전체를 참조합니다. |
교차 시트 참조
수식은 다른 시트에 대한 참조를 포함할 수 있습니다. 첫번째 시트의 A1셀의 값과 두번째 시트의 B1 셀 값을 더한 결과값을 세번째 시트에 표현하는 것을 교차 시트 참조 사용의 일례로 볼 수 있습니다.
교차 시트 참조시에는 '시트이름!셀' 구조로 특정 시트의 셀을 지정합니다. 예를 들어 Sheet1의 A1셀부터 A100셀까지의 합을 계산할 때에는 Sheet1!A1:Sheet1!A100과 같이 데이터 영역을 설정할 수 있습니다.
fpSpread1.Sheets[1].Cells("A1").Formula = "SUM(Sheet1!A1:Sheet1!A100)";
시트 이름에 영숫자가 아닌 문자가 포함될 경우 다음의 규칙을 지켜야 합니다.
공백과 같이 영숫자가 아닌 문자가 포함된 경우 수식에서 시트 이름을 작은따옴표로 묶어줍니다.
예: 이름이 page 1인경우 'page 1'!A1과 같이 사용합니다.
시트 이름에 작은따옴표 문자가 포함된 경우 수식에 두개의 작은따옴표 문자를 사용합니다.
예: scott's page인 경우 'scott''s page'!A1과 같이 사용합니다.
교차 시트 참조 허용여부는 EnableCrossSheetReference 속성을 사용하여 설정할 수 있습니다. 이 속성을 false로 설정할 경우 사용자가 다른 시트의 셀에 대한 수식 참조를 입력할 수는 있으나 셀 값으로는 #REF!가 표시됩니다.
// 교차 시트 참조 비허용 fpSpread1.EnableCrossSheetReference = false;
순환 참조
순환 참조란 셀에 입력된 수식에서 직간접적으로 셀 자신을 참조하는 경우를 의미합니다. 예를들어 다음 이미지와 같이 셀 A1 내에 입력된 수식이 셀 A1을 참조하는 경우가 포함됩니다.
순환 참조는 일반적으로 동일한 함수를 반복하여 최적값에 접근하기 위해 함수를 재귀적으로 수행하는 데 사용됩니다. 이때 MaximumIteration 속성을 사용하여 함수가 자체적으로 반복(재귀)하는 횟수를 설정할 수 있습니다. 또한 MaximumChange 속성으로 변화 한도값을 설정할 수 있습니다. 예제를 따라 순환참조를 사용해 보겠습니다.
Iteration 속성을 사용해 시트에서 순환 참조 계산 여부를 설정합니다. 기본값은 False이며 순환참조를 계산하지 않습니다. 이때 셀에는 순환참조를 발생시키는 수식이 입력되어있으나, 계산은 수행하지 않습니다.
// 활성화된 시트에서 순환 참조를 사용하도록 설정합니다. fpSpread1.ActiveSheet.Iteration = true;
MaximumChange 속성을 사용하여 시트에 대한 최대 반복 계산 횟수를 설정합니다.
// 최대 반복계산 횟수를 설정합니다. fpSpread1.ActiveSheet.MaximumChange = 5;
MaximumIterations 속성을 사용하여 변화 한도값을 설정합니다.
// 변화 한도값을 설정합니다. fpSpread1.ActiveSheet.MaximumIterations = 5;
순환 참조가 발생하도록 셀에 데이터와 수식을 입력합니다.
// 샘플 데이터 및 수식을 입력합니다. fpSpread1.ActiveSheet.SetValue(0, 1, 20); fpSpread1.ActiveSheet.SetFormula(0, 2, "A1*3"); fpSpread1.ActiveSheet.SetFormula(0, 0, "B1+C1");
코드 실행 시, 다음과 같은 결과를 확인할 수 있습니다.
샘플을 다운로드하여 전체 코드를 확인해 보실 수 있습니다.
지금 바로 Spread.NET을 다운로드하여 직접 테스트해보세요!
댓글목록
등록된 댓글이 없습니다.