본문 바로가기

VBA/엑사남_기초방86

[기초방] 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.
[기초방] VBA 100제 #65 [ 유효성 검사를 통한 필터링 ] 기초방 64번 문제에 필터링까지 발전한 문제이다. 처음에 의도한건 Filter함수로 해결하는 의도였지만, 엑셀 2021버전이상 가능한 함수여서 고급필터와 정렬함수로 해결하였다.더보기Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim rngAll As Range: Set rngAll = [e5].CurrentRegion Dim rngA As Range: Set rngA = [k6:m6] Dim rngX As Range Dim i& If Intersect(Target, [k6:m6]) Is Nothing Then Exit Sub For i = 1 To 3 Validation rngA.Item(i) '= 유횽성검사 호출 Next i .. 2023. 9. 20.
[기초방] VBA 100제 #64 [ 유효성 검사를 통한 총 수량 구하기 ] 엑셀에서 많이 나오는 문제이다. 각 키값을 조회하여 sumifs를 통해서 총 수량을 구하는 그런 문제.... 이런 문제를 VBA로 풀 사람이 있을까도 싶다..ㅋㅋㅋ 근데 언제는 그런 거 생각하고 문제를 낸게 아니므로...그냥 코드 리뷰를 해보려한다. 유효성 검사를 만들어가는 하위 프로시저가 핵심이 아닐까 한다. Sub Validation(rngX As Range) Dim rngV As Range Dim V Set rngV = Range(rngX(1, -5), rngX(1, -5).End(4)) V = Application.Sort(Application.Unique(rngV)) V = Join(Application.Transpose(V), ",") With rngX.Validation .Delete .Ad.. 2023. 9. 19.