해당 리스트에서 월별로 카운트를 해야 하는 함수이다.
이런 문제를 vba로 풀려면 행방향으로 진행하면서 각 행의 셀들을 순환하면서 각셀의 월을 구한 다음 그값의 월 대로 구분하여 카운트하면서 리스트를 모두 순환하면 된다.
각설하고
이 문제를 풀려면 이렇다.
행단위로 이동하고 그 이동한 값들을 비교하여 값을 도출하면 된다.
변수를 이용한 LET 함수를 풀면
=BYROW(C4:H53,LAMBDA(a,
LET(
_월10,SUM(IF(MONTH(a)=10,1,0)),
_월11,SUM(IF(MONTH(a)=11,1,0)),
"10월 : " &_월10 & " _ " & "11월 : " & _월11
)))
BYROW 함수로 해당 영역을 LAMBDA함수로 넘기게 되고, LET 함수로 각각의 변수에 계산된 결과값을 넘긴 후 출력하면 된다.
LET함수 없이 바로 출력하는 함수식을 구하고자 하면 이렇게 줄여쓸 수도 있다..
=BYROW(C4:H53,LAMBDA(a,"10월 : " & SUM(--(MONTH(a)=10)) & " _ " & "11월 : " & SUM(--(MONTH(a)=11))))
모두 리스트를 통으로 넘기고 한행한행을 LAMBDA 함수로 계산하여 출력하는 방식이다.
자 그럼 두번째 방식으로 VBA로 표현해보자
Option Explicit
Sub 기초방88()
[o4].Formula2 = "=BYROW(" & "C4:H53" & _
",LAMBDA(a," & """10월 : """ & " & " & "SUM(--(MONTH(a)=10))" & " & " & """ _ """ & " & " & _
"""11월 : """ & " & " & "SUM(--(MONTH(a)=11))))"
End Sub
배열수식으로 사용하려면 FORMULA2 임을 반드시 기억하자..
참고로
영역 [ "C4:H53" ] 을 기존방식대로 ARRAYTOTEXT로 넘기게 되면 값이 없는 부분이 0으로 표시되지 않고 공백으로 표시되는데
이렇게 되었을 때 계산이 되지 않는 걸로 확인되어 연구중이다. 혹시라도 이것에 대해서 알거나 본인이 알게 되었을 때 이것에 대해서 다시 리뷰토록 하겠다.
세상은 넓고 알야야 할것도 많다...
아..배고프다.
'VBA > 엑사남_기초방' 카테고리의 다른 글
[기초방] VBA 100제 #90 [ 부분합 구하기 ] (2) | 2023.11.01 |
---|---|
[기초방] VBA 100제 #89 [ 쇼핑몰 키워드 정리하기 ] (0) | 2023.10.28 |
[기초방] VBA 100제 #87 [ MMULT 를 이용한 효율구하기 ] (0) | 2023.10.27 |
[기초방] VBA 100제 #86 [ MMULT 를 이용한 행렬만들기 ] (0) | 2023.10.26 |
[기초방] VBA 100제 #85 [ 테이블 pivot] (0) | 2023.10.23 |
댓글