오빠두엑셀 `2026 무료 챌린지` 오픈! 완주하고 수료증 받아가세요! 5년 연속 IT분야 베스트셀러! 「 진짜쓰는 실무엑셀 」로 2026년 공부 끝내기 엑셀이 막히셨나요? Q&A 게시판에서 바로 해결하세요.
메뉴

마지막 셀 찾는 방법 총 정리 (마지막 행/열 반환) :: 엑셀 위키

VBA 매크로로 시트의 마지막 셀을 찾는 방법을 알아봅니다.

작성자 :
오빠두엑셀
최종 수정일 : 2020. 05. 21. 04:32
URL 복사
메모 남기기 : (9)

엑셀 VBA 마지막 셀 찾는 방법 :: 명령문 스니펫

엑셀 VBA 마지막 셀 찾기 목차 바로가기
명령문 스니펫

전체 시트에서 마지막 셀 찾기 (대부분의 상황에서 사용가능)

With ThisWorkBook.WorkSheets("시트명")
    ' 사용된 모든 범위에서 마지막셀을 찾습니다.
    Dim endRow As Long ' 마지막행
    Dim endCol As Long ' 마지막열
    endRow = .UsedRange.Rows.Count + .UsedRange.Row - 1
    endCol = .UsedRange.Columns.Count + .UsedRange.Column - 1
End With

특정 행/열에서 마지막셀 찾기

With ThisWorkBook.WorkSheets("시트명")
    ' 특정 행/열에서 마지막셀을 찾습니다.
    Dim endRow As Long ' 마지막행
    Dim endCol As Long ' 마지막열
    endRow = .Cells(.Rows.Count, 1).End(xlUp).Row
    endCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
End With

예제파일 다운로드

오빠두엑셀의 강의 예제파일은 여러분을 위해 자유롭게 제공하고 있습니다.

  • [엑셀위키] 시트 마지막셀 찾기 (마지막 행/열 번호 반환)
    예제파일

명령문 요약

시트에서 사용된 전체 범위 또는 특정 행/열에서 마지막 셀을 찾은 뒤, 셀의 행/열 번호를 반환합니다.

VBA 마지막 셀 찾기 사용 예제

특정 시트의 마지막 셀을 찾은 뒤, 마지막셀의 셀주소, 행번호, 열번호를 메세지박스로 출력하는 명령문을 작성합니다.

Sub Print_FinalCell()
 
Dim sShtName As String
 
sShtName = "시트1" ' 시트명을 입력합니다.
 
With ThisWorkbook.Worksheets(sShtName)
    Dim endRow As Long
    Dim endCol As Long
    Dim endCell As String
    endRow = .UsedRange.Rows.Count + .UsedRange.Row - 1
    endCol = .UsedRange.Columns.Count + .UsedRange.Column - 1
    endCell = .Cells(endRow, endCol).Address
End With
 
MsgBox sShtName & "의 마지막셀은 " & endCell & "입니다." & vbNewLine & _
        "행 번호는 " & endRow & "이고, 열번호는 " & endCol & "입니다."
 
End Sub

엑셀 마지막 셀 찾기 명령문의 동작원리

1. Range의 End 속성은 Ctrl + Shift + 방향키 동작을 수행합니다.

Ctrl + Shift + 방향키는 기준셀에서 연결된 범위의 마지막 셀까지 이동하는 동작을 수행합니다. 자세한 내용은 아래 관련포스트를 참고하세요.

End 속성은 총 4개의 방향으로 이동할 수 있으며, 입력 가능한 값은 아래와 같습니다.

  • Range.End(xlToLeft) : 왼쪽으로 이동
  • Range.End(xlToRight) : 오른쪽으로 이동
  • Range.End(xlToUp) : 아래로 이동
  • Range.End(xlToDown) : 위로 이동

관련링크 : MS 홈페이지 VBA Range End 속성 상세설명 바로가기 

2. Sheet 의 UsedRange 속성은 시트에서 사용된 전체 범위를 반환합니다.

예를들어, [ 시트1 ] 의 B2:C14 범위를 사용했다면, 명령문은 아래와 같이 동작합니다.

  • ' B2:C14 범위를 반환합니다.
    Set
    rng = ThisWorkBook.WorkSheets("시트1").UsedRange
  • ' 범위에서 사용된 행의 개수인 13을 반환합니다.
    endRow = rng.Rows.Count
  • ' 범위가 시작되는 행번호인 2를 반환합니다.
    startRow = rng.Row
  • ' 범위의 마지막 행 번호인 14를 반환합니다. 열번호도 동일한 원리로 동작합니다.
    endRow + startRow - 1 -> 13 + 2 - 1 -> 14

관련링크 : MS 홈페이지 VBA Sheet UsedRange 속성 상세설명 바로가기

3. Sheet 의 Rows.Count / Columns.Count 속성은 시트의 전체 행/열 개수를 반환합니다.

시트에서 사용가능한 전체 행/열의 개수는 엑셀 버전마다 다릅니다.

엑셀버전 최대 행 최대 열
2003 이전 65,536 256
2007 이후 1,038,576 16,384

현재는 대부분 엑셀 2007 이후 버전을 이용하고 있으므로, 최대 행번호와 열번호를 각각의 숫자(1,038,565 / 16,384)로 입력해도 괜찮습니다.

하지만 엑셀 2003 에도 매크로가 사용 될 수 있는 만약의 상황을 대비하여 Rows.Count 와 Columns.Count 속성을 사용하는 것이 좋으며, .Count 속성을 사용할 경우 작성한 코드가 더욱 깔끔해지는 일석이조 효과를 볼 수 있습니다.

댓글 9
5 (6개 평가)
TaylorJ
TaylorJ 2020.03.24 23:35
강의 정말 감사합니다. 차근차근 따라하는데, 참 쉽게 가르쳐주셔서 너무 고맙습니다.
근데 제걸로 만들려면 참 많은 노력이 필요하겠네요! ㅎㅎ
유한준
유한준 2020.04.06 08:16
마지막 셀을 찾는 방법 잘 보았습니다. 실제로 적용해보니 쉽네요 혹시 그렇다면 문자열이 나오는 첫번째 열을 찾을 방법도 있을까요 가령 Sheet의 A1 부터 A7 까지는 비어져있고 A8에 처음으로 문자열이 있을때, A8의 행, 열값을 반환 받을 수 있을까요?
오빠두엑셀
오빠두엑셀 작성자 2020.04.06 20:58
안녕하세요?^^
네 물론 입니다.
아래 명령문을 응용해보시겠어요?
Sheet1.Cells(Sheet1.Rows.Count ,1).End(xlUp).Row '행값을 반환합니다.
Sheet1.Cells(Sheet1.Rows.Count ,1).End(xlUp).Column ' 열값을 반환합니다.

제시해드린 답변이 도움이 되셨길 바랍니다.
감사합니다.
darkblling
darkblling 2021.02.19 17:38
.Cells(Rows.Count, "B").End(3)(2).Resize(, 4).Value = c.Offset(, -5).End(xlToLeft).Resize(, 4).Value
지금 셀 값을 복사할때 셀에 값이 없으면 offset이랑 end 때문에 다음 행으로 넘어가서 복사를 하는데, 하나의 열이라도 비어있는 열이 있어도 포함해서 복사하는 방법은 없을까요?
오빠두엑셀
오빠두엑셀 작성자 2021.02.23 22:26
시트의 오른쪽 끝에서 왼쪽방향으로 이동해서 열 번호를 찾도록 명령문을 작성해보세요.
Range("XFD1").End(xlToLeft).Column
윤민호
윤민호 2021.11.19 22:12
강의 잘 보고 있습니다.
실무에 응용해 보고자 하는데, 어떤 A열 마지막셀에 값을 넣어야 할 경우
가령 A열에 표가 A1:A10까지 있고 문자나 숫자가 A5까지 기록 되어 있다면(A6:A10까지는 공백), 매크로를 실행하면 문자를 건너띄고 공백을 지나 A10에 표시가 되는데,
저는 셀에 값이 있는 A6셀을 찾고자 할 때는어떻게 해야 되는지요?
(vba로 구현해야 할 때)
민구
민구 2022.04.23 21:06
 .UsedRange.Row - 1
이 부분이 의미하는 바는 멀까요??
endRow = .UsedRange.Rows.Count 이렇게만 해도 구해지는거 아닌가요?
오빠두엑셀
오빠두엑셀 작성자 2022.04.23 23:54
안녕하세요.
.UsedRange.Rows.Count
는 사용한 범위의 행 개수를 반환하므로
시트 범위가 1행이 아닌 중간부터 시작되면 잘못된 값을 반환해서
.UsedRange.Row - 1
를 사용하는 것이 좋습니다.^^
강민준🤗
강민준🤗 2024.08.10 16:06
좋은 강의 감사합니다.