본문 바로가기

코딩/엑셀,VBA

[엑셀/VBA] 엑셀 시트 마지막 행값 구하기

반응형

 

  지금까지 엑셀 VBA를 사용할 때 자주 사용했던 부분이 있어 정리해보는 포스팅. 엑셀 업무를 하다보면 아래와 같은 경우를 많이 볼 수 있다.

 

 

 

   위 양식은 지출내용을 정리한 간단한 엑셀파일이다. 엑셀을 좀 해봤던 사람이면 당연히 지출 합계는 SUM 함수를 사용해서 간단하게 구할 것이다. 만약, 합계를 데이터가 아래 추가될 때마다 자동으로 마지막 행까지 계산하여 출력하는 VBA 프로그램을 만든다고 해보자. 어떻게 해야될까?

 

  일단 결과 코드부터 작성해보면 아래와 같다.

 

<코드>

Sub 합계()
    Dim LastRow As Integer
    Dim i As Integer
    Dim rng As Range
    
    LastRow = Cells(Rows.Count, 3).End(3)(2).Row
    
    Range("F1") = "합계"
    Range("G1").Value = WorksheetFunction.sum(Range(Cells(2, 3), Cells(LastRow, 3)))
    

End Sub

 

 

<결과>

<자동으로 추가 된 행까지 계산 됨>

 

 

 

  위 기능을 구현하기 위해선 합계를 계산할 영역을 먼저 구해야 한다. 데이터가 추가될 때마다 마지막 행값을 알 수 있는 코드를 작성해주어야 한다. 마지막 행값은 여러가지 표현식으로 구할 수 있다. 대표적인 방법 3가지만 정리해보았다.

 

Case1)

LastRow = Cells(Rows.Count, 3).End(xlUp).Row

 

Case2)

 

LastRow = Cells(Rows.Count, 3).End(3).Row

 

Case3)

 

LastRow = Cells(Rows.Count, "C").End(3).Row

 

 

 아래에서 설명하겠지만 결론적으로 3가지 방식은 같은 의미이다. 위 코드를 이해하기 위해선 아래 2가지를 이해하면 된다.

 

 

 

1. Range 와 Cells : 엑셀 VBA에서 셀 영역을 가리키는 코드

 

 

  엑셀에서 셀 영역을 가리키는 코드는 Range와 Cells이다. 아래와 같은 예시로 정리해보았다.

 


1) Range로 표현하기 

 

 

-. Range는 각 행과 열의 인덱스를 활용한다. 

 

 

 

 

2) Cells로 표현하기

 

 

-. Cells은 시트의 각 셀 영역을 숫자로 표현한다. 1행 1열 기준 Cells(1,1)이다.

-. Range와 Cells을 결합하여 셀 다중범위를 설정할 수 있다.

-. Cells의 파라미터가 Integer(정수)이기 때문에 변수로 활용하여 VBA 코딩시 굉장히 많이 사용된다.

 

 


※ 참고 : 위 코드 중 Cells(Rows.count, 3) 의 의미

 

-. Rows.count : 행의 전체 갯수를 의미한다.(데이터만 채워져있는 행이 아닌 엑셀 시트 전체)

-. 3 : 3번째 열을 의미한다 "C" 라고 바꿔써도 동일한 결과가 나온다.

 


 

 

2. 종단 셀 : End(xlUp)과 End(3)의 이해

 

 

  이 부분은 니꾸님의 VBA 블로그에서 자세하게 정리해주셔서 내가 필요한 부분만 정리. 자세한 내용은 하단의 링크를 참고하면 된다. 간단히 요약하면 End(xlUp)은 아래에서 위로 이동하라는 명령이다. 

 

 

  즉, Cells(Rows.Count, 3).End(3).Row의 의미는 C열의 마지막 행에서 Data가 있는 위치까지 위로 이동하라는 명령이다. 즉, 마지막 Data가 있는 위치의 행값을 의미한다.

 

  추가로 마지막 Data가 있는 위치에서 다음 행에 Data를 삽입하는 코드를 작성하고 싶다면 위 행값에서 +1을 하거나, Cells(Rows.Count,3),End(3)(2) 를 사용하면 된다. 뒤에 (2)가 의미하는 바는 하단의 참고링크 참고

 


참고링크:

http://blog.naver.com/PostView.nhn?blogId=rosa0189&logNo=60145634878 

 

(599) Cells(Rows.Count, "A").End(3)(2)의 의미 (엑셀 VBA 매크로)

이 블로그에서 천 번도 넘게 나오는 코드 중의 하나가 Cells(Rows.Count, "A").End(3)(2) 와 같은 코...

blog.naver.com

 

728x90