본문 바로가기
VBA/엑사남_기초방

[기초방] VBA 100제 #88 [ 리스트에서 해당 월 카운트하기 ]

by 일등미노왕국 2023. 10. 28.

해당 리스트에서 월별로 카운트를 해야 하는 함수이다.

 

이런 문제를 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으로 표시되지 않고 공백으로 표시되는데 

 

 

이렇게 되었을 때 계산이 되지 않는 걸로 확인되어 연구중이다. 혹시라도 이것에 대해서 알거나 본인이 알게 되었을 때 이것에 대해서 다시 리뷰토록 하겠다.

 

 

세상은 넓고 알야야 할것도 많다...

아..배고프다.

 

 

기초방88.xlsm
0.02MB

댓글