EXCEL VBA

엑셀 VBA의 'CurrentRegion'과 'UsedRange' 이해하기

카루루1007 2024. 8. 8. 12:02
728x90
반응형

[ 들어가며 ]

 

Excel VBA로 작업할 때 데이터의 범위를 효율적으로 조작하기 위해서는
CurrentRegionUsedRange속성에 대해 이해하는 것이 중요합니다.

간단하게 설명하면
CurrentRegion현재 셀이 포함된 영역을 참조하고
UsedRange시트에서 사용된 영역 전체를 참조합니다.

 

[ CurrentRegion 이란? ]

 

CurrentRegion 속성은 빈 행과 빈 열로 둘러싸인 범위를 나타냅니다.
이 속성은 특정 셀에서 시작하여 연속적인 셀 블록을 범위로 하고
작업을 수행하는데 유용합니다.

코드와 결과를 보시면 이해가 더 쉽게 될 수 있습니다.

위 그림을 보시면
빨간색 행열을 기준으로 네 개의 표가 있습니다.
빨간색 부분은 값이 들어있지 않은
빈 행과 빈 열입니다.

CurrentRegion 속성은 빈 행과 빈 열로 둘러싸인 범위를 나타낸다고 했습니다.

다음 코드를 보면서 결과를 보겠습니다.

Sub Current_Used()
    Sheets(1).Range("A1").CurrentRegion.Select
End Sub

위 코드를 실행하면 아래와 같이
A1셀부터 E8셀 부분이 선택이 됩니다.
빨간색으로 칠해진 빈 행과 열을 넘어서 있는 데이터 범위는
선택하지 못합니다.

예시는 A1셀을 선택하는 것으로 들었지만,
아래에서 선택된 범위의 어떤 셀을 기준으로 해도
결과는 동일하게 나타납니다.

하나의 예시코드를 더 살펴보겠습니다.

Sub Current_Used()
    Sheets(1).Range("G4").CurrentRegion.Select
End Sub

이번에는 G4셀을 선택을 해보았습니다.
결과는 아래 그림과 같습니다.

 

반응형

[ UsedRange란? ]

 

UsedRange 속성은 워크시트에 사용된 모든 셀을 포함하는 범위를 나타냅니다.
데이터가 입력된 맨 첫 번째 셀부터 맨 마지막 셀까지를 범위로 지정합니다.

Sub Current_Used()
    Sheets(1).UsedRange.Select
End Sub

CurrentRegion은 먼저 Range 함수로 셀을 지정하고 CurrentRegion 속성을 사용했지만,
UsedRange는 시트를 지정하고 속성을 사용합니다.

위 코드의 결과입니다.

보시는 봐와 같이 데이터가 시작 셀과 끝 셀을 기준으로
그 안에 있는 모든 셀이 범위로 지정이 되었습니다.

아래 그림과 같이 M22셀에 임의의 값을 추가하고
같은 코드를 실행해 보겠습니다.

보시는 바와 같이 A1셀부터 M22셀까지 범위가 지정이 되었습니다.

728x90

[ 간단한 활용 예시 ]

 

먼저 아래 그림에서 A1셀부터 E8셀까지 입력된 숫자를 모두 더해보겠습니다.

Sub Current_Used()
    Dim ws As Worksheet
    Dim total As Double
    Set ws = Sheets(1)

    total = WorksheetFunction.Sum(ws.Range("A1").CurrentRegion)
    MsgBox "Total Sum: " & total
End Sub

위 코드를 실행하면
메시지 박스에 1869가 출력이 됩니다.

다음은 시트에 있는 모든 숫자를 더해보겠습니다.

Sub Current_Used()
    Dim ws As Worksheet
    Dim total As Double
    Set ws = Sheets(1)

    total = WorksheetFunction.Sum(ws.UsedRange)
    MsgBox "Total Sum: " & total
End Sub

위 코드를 실행하면
메시지 박스에 7447이 출력이 됩니다.

다음은 위 그림에서 비어있는 행을 삭제해 보겠습니다.

Sub Current_Used()
    Dim ws As Worksheet
    Dim rng As Range
    Dim i As Long

    Set ws = Sheets(1)
    Set rng = ws.UsedRange

    For i = rng.Rows.Count To 1 Step -1
        If WorksheetFunction.CountA(rng.Rows(i)) = 0 Then
            rng.Rows(i).EntireRow.Delete
        End If
    Next i
End Sub

위 코드는
UsedRange속성을 사용해 전체 데이터가 입력된 범위를 잡고
맨 마지막 행부터 검사를 시작합니다.

검사 내용은 해당 행에 데이터가 있는지 없는지를 확인하고
데이터가 없다면 지워버리고
데이터가 있다면 해당 행 바로 위 행을 조사합니다.


이 과정을 반복하며
비어있는 행을 모두 지워버립니다.

위 코드를 실행하면
아래 그림과 같이 결과가 나타납니다.

 

여기를 방문하시면 더 많은 엑셀 관련 자료를 확인할 수 있습니다.

엑셀 공부하기
VBA 공부하기

728x90
반응형