'엑셀 VBA 기간별 합계'에 해당되는 글 1건

  1. 2015.12.09 [엑셀 VBA 예제4] 기간별(날짜별) 합계 구하기

[엑셀 VBA 예제4] 기간별(날짜별) 합계 구하기



이번 예제는 기간/날짜별 합계를 구하는 예제입니다.


사업체를 운영하거나, 가계부를 작성하거나, 모종의 이유로 장부를 작성하고 있는 경우에 날짜별로 합계를 구할 필요가 있습니다.







위와 같은 장부에서, 날짜별 액수를 더하고 E1셀부터 날짜를, E2셀부터 입금액을 넣는 VBA입니다.

버튼을 누르게 되면 아래와 같은 결과를 얻을 수 있습니다.







Sub example()


Dim sumdata()                '값을 넣을 배열 추가

Dim nrow As Long            '시작하는 셀의 행

Dim ncol As Long                '시작하는 셀의 열

Dim lastD As String             

Dim i As Integer   

Dim D as string



    nrow = 2                '시작하는 셀의 행

    ncol = 1                '시작하는 셀의 열

    i = 1                    '카운터(배열의 행을 추가하기 위한)

    lastD = Left(Cells(nrow, ncol).Value, 7)        '날짜 중복을 방지하기 위한 설정

        For nrow = 2 To Cells(2, 1).End(4).Row        '시작행 2부터 값이 있는 마지막 셀까지 반복

        

        D = Cells(nrow, ncol).Value         '날짜 값 변수에 넣기               

            If D <> lastD Then                '이전 날짜 값과 같지 않다면

            i = i + 1                            '카운터에 1을 더한다

            End If

                ReDim Preserve sumdata(1 To 2, 1 To i)    '배열 재선언(카운터만큼 열을 늘린다)

                sumdata(1, i) = D                '날짜값을 배열의 첫 값에 넣음

                sumdata(2, i) = sumdata(2, i) + Cells(nrow, ncol).Offset(0, 1)   '누적되는 액수를 두번째 칸에 넣음

                lastD = D                'lastD값 재생성

        Next nrow             '날짜가 변할때 까지 액수 누적 반복       

   

    Cells(1, 4).Resize(2, i) = sumdata        '배열을 셀에 집어넣기

    


End Sub







ReDim Preserve는 무엇일까요?


Redim 배열()을 할 경우에는 배열의 값이 empty로 초기화됩니다.


하비만 Redim Preserve 배열()을 선언하는 경우에는, 배열의 칸이 작아지거나 아예 변경이 되지 않는 이상, 값이 변동되지 않습니다.






Posted by Simon K
: