1. 정의
변수에 값을 할당하고, 변수를 이용해 계산식을 정의하고 그 결괏값을 반환하는 함수입니다. 그러나 적용 범위는 Lambda 함수와는 달리 해당 수식에만 적용되는 한계가 있습니다.
적용 가능한 엑셀 버전 : Microsoft 365용 Excel, Microsoft 365용 Excel(Mac용), 웹용 Excel, Excel 2021, Mac용 Excel 2021
2. 구문
=LET(name1, name_value1, calculation_or_name2, [name_value2, calculation_or_name3...])
name1(이름1)에 name_value1(값1)을 할당하고,
이런 식으로 여러 개의 이름과 값의 쌍을 지정할 수 있으며,
마지막에는 이들 이름을 이용한 수식이 와야 합니다.
3. 이점
- 수식에 동일한 표현식을 여러 번 사용하면 여러 번 계산을 하는데, Let함수를 이용해 변수에 값을 할당하면 한 번만 계산을 수행한다
- 수식을 변수명을 사용해서 정의하기 때문에 이해하기 쉽다.
4. 사용 예
① 변수 한 개만 사용한 경우
A1셀의 수식 =let(x,3,x+2)는 x에 3을 대입한 다음 x+2의 값, 3+2=5를 반환합니다.
값을 대입할 때 보통 x=3식으로 입력하는데, let함수에서는 ,(콤마)를 사용하는 점이 특이합니다.
② 변수 두 개를 사용한 경우
x에 2를, y에 3을 대입한 후 x*y의 값, 2*3=6을 반환합니다.
③ 일정한 간격으로 된 열의 합계를 구하는 경우
아래와 같이 2열 간격으로 합계를 구하는 경우
B3셀의 수식은 =SUM(IF(MOD(COLUMN(D3:N3),2)=MOD(COLUMN(D3),2),D3:N3))로서
(방법 1)
D3:N3가 2번 나오고, D3는 한 번 나오는데, D3:N3를 calc_range변수에 할당하고, D3를 first_cell 변수에 할당하면 수식은 아래와 같이 됩니다.
=LET(calc_range,D3:N3,first_cell,D3,SUM(IF(MOD(COLUMN(calc_range),2)=MOD(COLUMN(first_cell),2),D3:N3)))
(방법 2)
D3는 calc_range를 이용해서 표현하면 offset(calc_range,,,1,1)로 표시할 수 있습니다.
Offset함수의 인수는 Offset(셀 주소, 이동할 행 수, 이동할 열 수, 높이(height), 너비(width))로서
지정된 셀 주소에서 행이나 열 방향으로 이동하지 않을 것이므로 0,0 또는 입력하지 않고 ,(콤마) 표시만 넣을 수 있으며,
A1셀은 height를 1, width를 1로 지정하면 됩니다.
따라서, 수식은
=LET(calc_range,D3:N3,SUM(IF(MOD(COLUMN(calc_range),2)=MOD(COLUMN(OFFSET(calc_range,0,0,1,1)),2),D3:N3))) 또는
=LET(calc_range,D3:N3,SUM(IF(MOD(COLUMN(calc_range),2)=MOD(COLUMN(OFFSET(calc_range,,,1,1)),2),D3:N3)))가 됩니다.
(방법 3)
first_cell변수를 없애고, 수식에서 OFFSET(calc_range,0,0,1,1)라고 입력했는데,
first_cell, OFFSET(calc_range,0,0,1,1)라고 입력하고 수식에 first_cell이라고 입력할 수 있습니다.
그러면 수식은
=LET(calc_range,D3:N3,first_cell,OFFSET(calc_range,0,0,1,1),SUM(IF(MOD(COLUMN(calc_range),2)=MOD(COLUMN(first_cell),2),calc_range)))이 됩니다.
B3셀의 채우기 핸들을 오른쪽으로 끌고, 다시 아래로 끌면 수식이 B3에서 C4셀까지 채워지는데,
상대적인 위치에 따라 주소가 변경되어 정확한 값이 구해집니다.
C4셀의 수식은
=LET(calc_range,E4:O4,first_cell,OFFSET(calc_range,0,0,1,1),SUM(IF(MOD(COLUMN(calc_range),2)=MOD(COLUMN(first_cell),2),calc_range)))으로
D3:N3가 E4:O4로 바뀌어서 정확한 값이 구해지는 것을 알 수 있습니다.
(방법 4)
Column(calc_range)까지 변수에 할당하면
Column_of_Calc_range, Column(calc_range)라고 변수와 값을 지정할 수 있고,
COLUMN(OFFSET(calc_range,0,0,1,1))는
Column_of_First_cell, COLUMN(OFFSET(calc_range,0,0,1,1))로 변수에 값을 할당할 수 있습니다.
변수와 값의 쌍은 총 3개가 되어 너무 복잡합니다.
=LET(calc_range,D3:N3,Column_of_Calc_range, COLUMN(calc_range),Column_of_First_cell, COLUMN(OFFSET(calc_range,0,0,1,1)),SUM(IF(MOD(Column_of_Calc_range,2)=MOD(Column_of_First_cell,2),D3:N3)))
이 정도는 너무 복잡해서 오히려 가독성을 해칩니다.
(방법 5)
세로 방향으로 한 줄씩 떨어진 값을 더할 경우의 수식을 Let함수를 이용해 구하면
column을 row로만 바꾸면 아래와 같은 수식이 됩니다.
=LET(calc_range,C4:C14,first_cell,OFFSET(calc_range,,,1,1),SUM(IF(MOD(ROW(calc_range),2)=MOD(ROW(first_cell),2),calc_range)))
C2셀의 채우기 핸들을 오른쪽으로 끌고, 다시 아래로 끌면 D3셀까지 수식이 채워지는데 가로 방향의 합계와 같습니다.
(방법 6)
간격 2도 반복되므로 interval변수에 값 2를 할당하면 수식은
=LET(calc_range,C4:C14,first_cell,OFFSET(calc_range,,,1,1),interval,2,SUM(IF(MOD(ROW(calc_range),interval)=MOD(ROW(first_cell),interval),calc_range))) 가 됩니다.
앞으로는 간격이 3,4식으로 변경되더라도 interval의 값만 바꾸면 되므로 편리합니다.
(방법 7)
행방향인지 열 방향인지를 rows(calc_range), 다시 말해 계산 범위의 행수가 1인지, 아니면 1보다 큰지에 따라 If함수를 적용하면 아래와 같습니다.
=LET(calc_range,D3:N3,first_cell,OFFSET(calc_range,,,1,1),interval,2,IF(ROWS(calc_range)>1,SUM(IF(MOD(ROW(calc_range),interval)=MOD(ROW(first_cell),interval),calc_range)),SUM(IF(MOD(COLUMN(calc_range),interval)=MOD(COLUMN(first_cell),interval),calc_range))))
세로 방향 합계에 적용할 때는 위 수식을 복사해서 붙인 후 calc_range만 C4:C14로 수정하면 됩니다.
'Excel' 카테고리의 다른 글
indirect 함수(1) - 참조 셀의 값을 반환하는 함수 (0) | 2023.03.27 |
---|---|
Lambda 함수를 이용한 일정 간격의 값 합계 구하기 (0) | 2023.03.23 |
일정한 간격으로 된 값 합계 구하기 - 배열 수식 (0) | 2023.03.17 |
엑셀에서 전체 범위 선택하기 - 단축키 (0) | 2023.03.14 |
조건부 서식과 색 기준 필터(2) (2) | 2023.03.01 |