본문 바로가기

VBA271

[기초방] 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.
[기초방] VBA 100제 #66 [ 문자열 정렬하기(feat. 배열정렬) ] 문자열을 정렬하는 구문이다. 정렬을 위해서 지나칠 정도로 꼬아놓은 문제이다. 우선 몇일동안 본인이 올려놓은 코드들중에 일부 코드가 오피스 2019버전 이하에서는 적용이 안될수 있다. 이번 문제를 풀기 위해서 키 역할을 한 녀석이 SortBy인데 역시 하위버전에서는 작동이 안될 수 있다. 우선 엑셀 sort 함수를 이용한 배열 정렬이다. ReDim maxNum(1 To UBound(Vall, 1), 1 To 2) For Each Va In Vall i = i + 1 maxNum(i, 1) = Va maxNum(i, 2) = .MaxIfs(rngAll.Offset(, 1), rngAll, Va) Next Va maxNum = application.Sort(maxNum) 배열을 정렬하여 maxNum 배열에 넣.. 2023. 9. 21.