본문 바로가기

VBA/엑사남_기초방86

[기초방] VBA 100제 #71 [ 전체누적 + 월별누적 ] 자 이번 문제는 전체누계와 월별 누계를 따로 계산해야 하는 문제이다. 전체누계야 그냥 처음부터 계속 더하면서 나가면 될것이고 월별누계가 약간 머리를 써야 한다. 원래는 엑셀 수식처럼 해당일자와 전일 일자와의 월을 비교해서 구하는게 정석이지만, 문제를 만들때 2023-01-01부터 9월까지 쭉 만들어 놓은거라.. DAY 함수를 사용하여 1일 인지를 파악하여 월별 누계를 구하였다. If Day(rngA(1, 0)) = 1 Then Val2 = Val2 * 0 + rngA Else: Val2 = IIf(Val2 = 0, rngA, Val2 + rngA): End If 핵심 구문은 이렇다. 해당일자의 일자가 1일인지를 확인해서 1일이며 새로운 달이 시작한 의미이기 때문에 누계값을 초기화 해준 후 해당일자의 값을.. 2023. 10. 8.
[기초방] VBA 100제 #70 [ 구간별 값 구하기 ] 우노사설님의 강의를 리뷰한 문제이다. https://www.youtube.com/watch?v=5X_NhTJUpGM 본인의 코드 진행이 이해가 안된다면 강의를 보고 진행하는것을 추천한다. 이번 문제는 테이블에서 각 구간에 해당되는 값들의 갯수를 출력하는 문제이다. 그러기 위해서는 일단 양수라는 조건하에 테이블의 최대값을 구한 후, 그것을 CEILING_MATH 함수로 각 조건의 STEP의 배수로 재조정하여야 한다. MaxVal = .Ceiling_Math(.Max(rngAll), Step) 이렇게 구해진 값으로, 각 구간을 SEQUENCE로 분리해야 한다. 아래의 코드는 SEQUENCE함수로 구한 값을 ARRAYTOTEXT로 배열상수화 시키는 구문이다. Vlist = .ArrayToText(.Sequen.. 2023. 10. 2.
[기초방] VBA 100제 #69 [ 테이블 순환하며 결합하기 ] 기초방 68문제의 해결을 각 표를 하나씩 하드 코딩하여 붙혀넣기 하였다면, 이번 구문은 각 테이블을 순환하면서 표 개체를 하나씩 붙혀넣기 하는 방식으로 풀어보았다. For Each ListTbl In ActiveSheet.ListObjects '= 각 표의 데이터 값을 가져옴 ListTbl.DataBodyRange.Copy Cells(Rows.Count, "f").End(3)(2).PasteSpecial xlPasteValues Next ListTbl 각 테이블을 순환하면서 출력 테이블의 데이터값이 있는 행의 다음 행에 각 테이블의 값만 가져오는 코드이다. 이게 이번 문제의 키가 될것이다. 더보기 Option Explicit Sub 기초방69() Dim ListTbl As ListObject Dim i&.. 2023. 10. 2.
[기초방] VBA 100제 #68 [ 테이블 결합하기 ] 크기가 서로 다른 표를 결합하여 정렬하는 문제이다. 본인은 이번 문제를 두가지 방법으로 풀어보았다. 365함수까지 생각하면 세가지 방법이 맞을것 같다. 첫번째는, 전형적인 셀기반 방식이다. 표1과 표2를 표3에 붙힌 후 이를 정렬하여, 문제에 따라 일부열의 위치를 서로 바꾸는 형태이다. 두번째는, 각 영역을 배열상수 형태로 변경해주는 ArrayToText방식으로 하는 배열 형태이다. 배열상수 형태라고 하는것은 형렬의 형태를 {"회색","부산",117,"2023";"회색","부산",124,"2022";"파랑","강원",157,"2023";"노랑","부산",166,"2021"} 이렇게 나타내주는것을 말한다. 이를 구현하기 위해서는 [j7]= "=" & Application.ArrayToText((rngB),.. 2023. 10. 1.