이번에 리뷰해볼 수식은 서랍님이 엑사남 방에 올려주신 시작일과 종료일사이에 해당하는 월을 O으로 표기하는 수식을 리뷰해 보려고 한다.
시작일과 종료일의 날짜의 차이에 +1을 하는 이유는
시작일 : 2016-03-25
종료일 : 2023-06-05
라고 할때,
2023 - 2016의 차는 7이지만 실제로는 8부터이기 때문에 모든 날짜 계산에 +1을 해야한다.
_day_list, UNIQUE(EOMONTH(SEQUENCE(_end - _start + 1, , _start), -1) + 1),
두기간 사이의 날짜를 구해서 그 날짜들의 EOMONTH(날짜 , -1)를 구하면 전월의 마지막이 나오게 되는데 그 값의 +1을 하게되면 결국 해당월의 처음을 구할 수 있고 그 값들의 고유값을 구하게 되면 각 해당 월에 해당하는 1일을 구할 수 있다.
_t2, --(TRANSPOSE(_day_list) = _t1),
이렇게 하면 해당월의 시작일과 해당연도의 시작일 사이의 교차점에 TRUE , FALSE를 반환하는데 --을 통해서 1과 0으로 변하게 된다.
_td, WRAPROWS(IF(BYROW(_t2, LAMBDA(x, SUM(x))) = 1, "O", ""), 12),
BYROW로 함수로 앞서 구한 값들의 교차점의 합을 구하면 1이 되는데 그것들 통해 교차점에는 O / 아니면 빈값을 반환하는 한줄의 값들이 쭈욱 나열되는데 WRAPROWS를 통해서 위에서 부터 12개씩 ( 1월부터 12월) 짤라서 열방향으로 쌓으면서 TABLE 형태의 값을 도출하게 되는것이다.
더보기
=LET(
_start, $B$1,
_end, $B$2,
_year_list, SEQUENCE(YEAR(_end) - YEAR(_start) + 1, , YEAR(_start)),
_month_list, SEQUENCE(, 12),
_day_list, UNIQUE(EOMONTH(SEQUENCE(_end - _start + 1, , _start), -1) + 1),
_t1, TOCOL(DATE(_year_list, _month_list, 1)),
_t2, --(TRANSPOSE(_day_list) = _t1),
_td, WRAPROWS(IF(BYROW(_t2, LAMBDA(x, SUM(x))) = 1, "O", ""), 12),
_output, VSTACK(HSTACK("구분", _month_list), HSTACK(_year_list, _td)),
_output
)
본인 역시 365함수가 익숙치않아 코드를 하나하나 리뷰할때마다, 몇번씩 뜯어보곤한다.
본인의 리뷰를 몇번씩 보다 보면 이글을 읽고 있는 당신도 금방 365에 익숙해질수 있을 것이다.
'VBA > 365 FUNCTION' 카테고리의 다른 글
[365 함수리뷰] 간편차트 만들기 (0) | 2023.10.20 |
---|---|
[365 함수리뷰] 달력만들기 (0) | 2023.10.20 |
[365 함수리뷰] MAKEARRAY 구구단 만들기 (0) | 2023.10.19 |
[365 함수리뷰] PIVOT 구현하기 (0) | 2023.10.18 |
[365 함수리뷰] 동적으로 출력되는 테이블 (2) | 2023.10.16 |
댓글