본문 바로가기

Haja158

[기초방 [기초방] VBA 100제 #72 [ 조건에 맞는 숫자 반환 및 정렬 ] 영역을 순환하면서 50보다 큰 수를 vtemp 배열에 담아라 or Each rngA In rngAll If rngA > 50 And TypeName(Application.Match(rngA, vtemp, 0)) = "Error" Then i = i + 1 vtemp(i, 1) = rngA End If Next rngA 이렇게 하면 vtemp 에 50보다 큰 값들이 모두 쌓이게 되고 / i 변수에는 실제 숫자가 몇개 담겨 있는지 그 갯수가 나온다. 자 여기서 가장 핵심구문이다. 반환되는 영역이 11 x 4 이지 여기에 정확하게 50보다 큰수가 몇개 들어갈지는 모른다. 구해보면 11 x 4 = 44개중 실제로 값은 42개만 들어가게 된다. 그렇다면 vtemp(43,1) 과 vtemp(44,1) 의 값은 비어.. 2023. 10. 12.
[스프레드시트] 대시보드 만들기#2 대시보드 그까이거 대충 차트 몇개 넣어서 뺑글뺑글 돌아가게 하면 되는거 2023. 10. 10.
[기초방] 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] 대량 데이터에서 부분합구하기 부분합에 대한 고민이다. 23000건 정도의 데이터이니 이걸 우리가 아는 부분합으로 구한다면 셀 사이사이를 부분합이 들어가야 하기 때문에 분명히 에러가 발생할 것이다. 질문자의 고민도 그런 고민일것이다. 이러한 문제의 해법은 기존 시트에 Insert를 하기보단 부분합전까지 배열이나 셀에 담고 부분합을 구한 후 다시 리스트를 쌓고 다시 부분합을 구하는 방식으로 해야 엑셀에 무리가 가지 않는다. 부분합전까지 리스트의 갯수를 구하기 위해서는 1. 고유값을 찾아내야 한다. uni = Application.Unique(rngAll.Columns(14)) 이 코드는 전체 영역중 14번째 열의 모든값을 배열로 담아서 고유값을 구한 후 uni 배열에 담는 구문이다. * 유니크 함수는 버전별로 작동이 안될 수도 있으니 .. 2023. 10. 4.