엑셀 VBA에서 워크시트의 마지막 셀 위치(행, 열, 셀 주소)를 가져오는 방법


엑셀의 VBA 프로그램을 작성할 때 워크시트의 마지막 셀의 위치를 가져오는 것은 매우 중요하며 자주 사용하는 로직입니다. 따라서 마지막 행을 찾는 로직이나 마지막 열을 찾는 로직을 다양한 방법으로 구현해서 가져오기도 합니다.

하나의 결과를 도출하는 프로그램 로직은 다양하게 구현할 수 있습니다. A에서 B로 바로 갈 수도 있고, A에서 C를 거쳐 B로 갈 수도 있습니다. 어떠한 방법으로 결과를 도출할지는 전적으로 개발자의 역량에 달려 있습니다.

간혹 마지막 행 또는 마지막 열의 위치를 구할 때 중간에 비어 있는 행이나 열이 있는 경우 바로 직전의 행 또는 열을 마지막으로 인식해서 가져오는 오류를 범하기도 합니다.

이번 글에서는 엑셀 VBA에서 워크시트의 마지막 셀 위치를 가져오는 방법에 대해 알아보겠습니다.
여기서 말하는 셀 위치는 마지막 행(Row), 마지막 열(Column), 그리고 마지막 셀의 주소(Cell Address)를 말합니다.

엑셀 VBA에서 워크시트의 마지막 셀의 Row, Column, Cell Address를 가져오는 방법

▼ 아래 화면은 VBA 매크로를 실행했을 때의 화면 입니다.

  • 워크시트의 마지막 셀의 위치를 행, 열, 셀 주소로 각각 찾아서 보여주는 화면입니다.
엑셀 VBA에서 워크시트의 마지막 셀 위치(Row, Column, Cell Address)를 가져오는 방법

워크시트의 마지막 셀의 Row, Column, Cell Address를 찾아 오는 실제 VBA 소스와 설명

▼ 아래 VBA 소스는 특정 워크시트의 마지막 셀의 Row, Column, Address를 각각 가져오는 로직입니다.

Sub 시트의_마지막_셀위치()
‘ 워크시트의 마지막 셀(Row, Column, Address) 위치 가져오기
 
    Dim lastRow
    Dim lastCol
    Dim lastAdd
    
    lastRow = Worksheets(“Sheet2”).Cells.Find(“*”, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    lastCol = Worksheets(“Sheet2”).Cells.Find(“*”, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
    lastAdd = ActiveSheet.Cells(lastRow, lastCol).Address
    
    Range(“D2”= “마지막 행: “ & lastRow
    Range(“D3”= “마지막 열: “ & lastCol
    Range(“D4”= “마지막 셀주소: “ & lastAdd
    
  
    MsgBox “마지막 위치 가져오기 완료”
 
End Sub
 


1. Sub 시트의_마지막_셀위치() : 엑셀에서 실행할 매크로 이름이 됩니다.

2. 현재 작업 시트가 “Sheet2” 인 경우 Worksheets(“Sheet2“)와 ActiveSheet는 서로 동일한 시트를 의미합니다.

3. Worksheets(“Sheet2”).Cells.Find(“*”, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
– 워크시트의 맨 아래에서 위로 검색하는 방식으로 마지막 행을 찾습니다. 따라서 시트 중간중간 빈 행이 있었도 언제나 결과는 워크시트의 마지막 행을 찾게 됩니다.

4. Worksheets(“Sheet2”).Cells.Find(“*”, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
  – 워크시트의 맨 오른쪽에서 왼쪽으로 검색하는 방식으로 마지막 열을 찾습니다. 따라서 시트 중간중간에 빈 열이 있어도 언제난 결과는 워크시트의 마지막 열을 찾게 됩니다.

5. ActiveSheet.Cells(lastRow, lastCol).Address
  – 마지막 행 번호와 열 번호를 가지고 셀의 주소를 가져오는 구문입니다.





이 글이 도움이 되었기를 바랍니다. ^-^


답글 남기기