본문 바로가기

VBA/엑사남_기초방93

[기초방] 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.
[기초방] VBA 100제 #67 [ 테이블 요약하기 ] 앞으로 포스팅할 내용들은 365 함수와 연계하여 작성 하도록 하려고 한다. 중요한 이유는 VBA보다는 엑셀 함수를 사용하여 짧고 빠르게 해결할 수 있는 문제들이기 때문이다. 본인이 아무리 코드를 줄인다고 해도, 막강한 365 함수를 이겨낼 수 없다. 기초방 67번같은 경우, 각 상품의 날짜와 품목을 키로 하여 각각의 판매 합계와 갯수, 평균, 최대 최소값을 구하는 것인데. 일반적으로 이러한 문제를 접근하기 위해서는 앞서 공개한 크루들의 코드처럼 엑셀 함수로 푸는것이 정석이고 정답이라고 말하고 싶다. 코드 자체는 엑셀 함수 기반이라서 큰 어려움은 없을 것이다. 더보기 Option Explicit Sub 기초방67() Dim rngAll As Range: Set rngAll = [a5].CurrentRegi.. 2023. 10. 1.