엑셀 VBA 마지막 행과 열의 수 찾기

엑셀(Excel)/VBA

엑셀 VBA 마지막 행과 열의 수 찾기

 

환경: Microsoft Excel 2013

 

VBA 코드로 시트에서 행과 열에 연속된 데이터가 몇 개가 있는지 측정해 보겠습니다. 빈칸이 있는 곳까지 개수를 세게 됩니다. 이것이 중요한 이유는 시트에 데이터가 몇 개인지 알아야 반복문을 돌릴 수 있기 때문입니다. 이 방법을 알고 있으면 데이터가 늘어나더라도 소스는 변경할 필요가 없습니다. 출력값은 가로와 세로의 데이터 개수입니다. 

 

첫 번째는 행의 개수를 알아내는 것입니다. Cells() 함수로 제일 하단 셀 번호를 지정합니다. 행의 끝 번호를 정확하게 지정하기 힘들지만 Rows.Count 로 알아 올 수 있습니다. 그리고 End() 함수로 아래에서 위로 훍어오는 것이죠. 그 상수값이 xlUp 입니다. 만약 위에서 아래로 내려간다면 xlDown 이 되겠죠. 아래 샘플 소스를 실행한 결과는 사용한 행의 개수를 알려 주고 있습니다.

 

Sub colrownum()

    Dim lastRow As Long

    lastRow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row

    MsgBox "1번행의 개수: " & lastRow

End Sub

 

엑셀 VBA 마지막 행과 열의 수 찾기


다음은 열의 개수를 알아보겠습니다. 행과 반대로 Cells() 함수에서 셀을 지정할 때 열 번호에 해당하는 인수로 Columns.Count 를 넘깁니다. 그럼 열의 오른쪽 끝지점 부터 왼쪽으로 오면서 개수를 세면 되겠죠. 그렇게 진행할 수 있도록 End() 함수의 인자로 xlToLeft 를 입력합니다. 반대는 xlToRight 입니다.

 

Sub colrownum2()

    Dim lastColumn As Long

    lastColumn = Sheet1.Cells(1, Columns.Count).End(xlToLeft).Column

    MsgBox "1번열의 개수 : " & lastColumn

End Sub

 

엑셀 VBA 마지막 행과 열의 수 찾기

 

다음은 End() 함수와 상수값을 조합해서 알아오는 것이 아니라 Rows.Count Columns.Count 로 셀에서 사용하고 있는 영역의 수를 알아 오는 방법입니다. 그런데 위에서 사용한 Rows.Count 와 어떻게 다를까요? 위에서 사용한 Rows.Count 는 셀에서 열이 허용하는 전체 개수를 가져옵니다. 아마 16,000 이 넘을 겁니다. 그런데 아래에 쓰인 Rows.Count 는 사용한 영역 개수인 7개만 가져올 옵니다. 그 차이는 UsedRange 때문입니다. 현재 사용한 셀의 영역을 리턴하는 함수입니다. 아래 샘플 그림에서 예를 들자면 UsedRange A1:H7 을 영역 객체를 가져옵니다. 이 안에서 Rows.Count 를 측정하기 때문에 당연히 7 이 리턴되겠죠. 열을 나타내는 Rows.Count 도 마찬가지 입니다.

 

Sub colrownum3()

    With Sheet1.UsedRange

        MsgBox .Rows.Count & " rows and " & .Columns.Count & " columns"

    End With

End Sub

 

엑셀 VBA 마지막 행과 열의 수 찾기

 

Posted by 녹두장군

댓글을 달아 주세요

  1. 김동민 2019.06.19 13:37  댓글주소  수정/삭제  댓글쓰기

    좋은 레퍼런스 남겨주셔서 감사합니다. 많은 도움이 되었습니다.

  2. 나무아이.씨.기영 2019.07.24 17:02  댓글주소  수정/삭제  댓글쓰기

    수 년 전부터 여러 번 도움을 받아왔습니다. 덕분에 유용한 프로그램 만들 수 있었습니다. 고맙습니다!