우노사설님의 강의를 리뷰한 문제이다.
https://www.youtube.com/watch?v=5X_NhTJUpGM
본인의 코드 진행이 이해가 안된다면 강의를 보고 진행하는것을 추천한다.
이번 문제는 테이블에서 각 구간에 해당되는 값들의 갯수를 출력하는 문제이다.
그러기 위해서는 일단 양수라는 조건하에 테이블의 최대값을 구한 후, 그것을 CEILING_MATH 함수로 각 조건의 STEP의 배수로 재조정하여야 한다.
MaxVal = .Ceiling_Math(.Max(rngAll), Step)
이렇게 구해진 값으로, 각 구간을 SEQUENCE로 분리해야 한다.
아래의 코드는 SEQUENCE함수로 구한 값을 ARRAYTOTEXT로 배열상수화 시키는 구문이다.
Vlist = .ArrayToText(.Sequence(MaxVal / Step, , Step, Step), 1)
그 다음은 구해진 구간을 셀에 출력한 후 각 구간에 맞는 계산을 하게 되는데 결과물과 같이 ' <= ' 을 포함하기 위해 한번의 작업이 더 들어가야 한다.
[l8].Formula2 = "=" & Vlist
[m8].Formula2 = "=" & .ArrayToText(.Index(.Frequency(rngAll, Range([l8], [l8].End(4))), .Sequence(listcnt)), 1)
str = """<=""" & "&"
[l8].Formula2 = "=" & str & Vlist
첨부한 우노사설님 강의를 보시면 알겠지만 CEILING_MATH 함수는 항상 마지막 값을 도출하게 되는데 이걸 정리하기 위해서 365 함수를 이용해서는 마지막을 정리하기 위해서는
DROP(배열, -1) 또는 INDEX(배열, SEQUENCE(행의길이) 로 잘라주면 되는데 VBA에서는 아직 DROP함수를 사용할 수 없기 때문에 이번 구문에서는 SEQUENECE를 사용하였다.
[m8].Formula2 = "=" & .ArrayToText(.Index(.Frequency(rngAll, Range([l8], [l8].End(4))), _
.Sequence(listcnt)), 1)
365함수를 이용해서는 LAMDA함수를 이용하였는데
만들어진 람다함수를 이용해서, 이름정의를 통해서 사용자함수를 구성할 수 있다.
본인의 글만 보고서는 감이 잘 안잡히고 복잡해 볼일 수 있지만, 우노사설님 강의를 듣고 온다면, 본인이 365함수를 두고 굳이 이렇게 vba함수를 통해서 결과값을 도출하는것이 안쓰럽게 보일 수 있을것이다. ㅋㅋㅋ
언제 우리가 누구한테 보여주려고 이 짓(?)을 했는가....내 만족이지
'VBA > 엑사남_기초방' 카테고리의 다른 글
[기초방 [기초방] VBA 100제 #72 [ 조건에 맞는 숫자 반환 및 정렬 ] (0) | 2023.10.12 |
---|---|
[기초방] VBA 100제 #71 [ 전체누적 + 월별누적 ] (0) | 2023.10.08 |
[기초방] VBA 100제 #69 [ 테이블 순환하며 결합하기 ] (0) | 2023.10.02 |
[기초방] VBA 100제 #68 [ 테이블 결합하기 ] (0) | 2023.10.01 |
[기초방] VBA 100제 #67 [ 테이블 요약하기 ] (0) | 2023.10.01 |
댓글