본문 바로가기
Range object

[Range 개체] EntireRow속성

2023. 7. 6.

Range개체의 EntireRow속성은 지정된 범위를 포함하는 전체 행을 나타내는 Range 개체를 반환합니다. 읽기 전용 속성입니다.

Rows속성과 마찬가지로 Range개체를 반환하므로 Range개체의 속성과 메서드를 사용할 수 있습니다.

아래 코드는 빈 행을 역순으로 삽입하는 예제입니다.

Sub InsertEmptyRows()

    Dim MyRange As Range
    Dim iCounter As Long
    Dim ws As Worksheet

    ' 워크시트를 선택합니다. 여기서는 현재 활성화된 워크시트를 사용합니다.
    Set ws = ActiveSheet
    
    ' 처리할 범위를 설정합니다.
    Set MyRange = ws.Range("A1:E10")

    ' 범위의 행 수만큼 뒤에서부터 하나씩 빈 행을 삽입합니다.
    ' 마지막 행은 2 (첫 번째 행 제외한 행을 선택)부터 시작하므로 2까지 계산을 수행합니다.
    
    For iCounter = MyRange.Rows.Count To 2 Step -1
        ' 행을 삽입합니다.
        MyRange.Rows(iCounter).EntireRow.Insert
    Next iCounter

End Sub

매크로 실행 전

매크로 실행 후

역순으로 빈 행을 삽입하는 이유는 행 삽입의 경우 행을 아래로 밀면서 삽입하기 때문입니다.

아래와 같이 코드를 작성했다고 가정합니다.

Sub IncorrectInsertEmptyRows()

    Dim MyRange As Range
    Dim iCounter As Long
    Dim ws As Worksheet

    Set ws = ActiveSheet
    Set MyRange = ws.Range("A1:E10")

    ' 범위의 두 번째 행부터 마지막 행까지 앞에서부터 순차적으로 빈 행을 삽입합니다.
    For iCounter = 2 To MyRange.Rows.Count

        ' 행을 삽입합니다.
        MyRange.Rows(iCounter).EntireRow.Insert

    Next iCounter

End Sub

위 코드를 실행하면 아래 그림과 같은 결과가 발생하므로 행 삽입을 할때는 역순으로 해야 합니다.

다음은 빈 행을 삭제하는 코드입니다.

Sub DeleteEmptyRows()

    Dim MyRange As Range
    Dim iCounter As Long
    Set MyRange = ActiveSheet.UsedRange  ' 현재 시트의 사용 중인 범위를 MyRange 변수에 할당

    ' 역순으로 범위의 각 행을 처리
    For iCounter = MyRange.Rows.Count To 1 Step -1
        ' 만약 현재 행의 모든 값이 비어있다면 (빈 행이라면)
        If Application.CountA(Rows(iCounter).EntireRow) = 0 Then
            Rows(iCounter).Delete  ' 현재 행을 삭제
        Else
        End If
        
    Next iCounter
    
End Sub

매크로 실행 전

매크로 실행 후

순차적으로 삭제하는 코드를 만들어 봤습니다.

Sub DeleteEmptyRows()

    Dim MyRange As Range
    Dim iCounter As Long
    Set MyRange = ActiveSheet.UsedRange  ' 현재 시트의 사용 중인 범위를 MyRange 변수에 할당

    ' 순차적으로 범위의 각 행을 처리
    For iCounter = 1 To MyRange.Rows.Count
    
        ' 만약 현재 행의 모든 값이 비어있다면 (빈 행이라면)
        If Application.CountA(Rows(iCounter).EntireRow) = 0 Then
            Rows(iCounter).Delete  ' 현재 행을 삭제
        Else
        End If
        
    Next iCounter
    
End Sub

매크로 실행 전

매크로 실행 후

삭제를 순차적으로 진행하다 보니, 삭제되는 행의 위치가 바뀌어 원하는 작업이 제대로 이루어지지 않았습니다. 이미 언급한대로 셀의 위치에 영향을 주는 삽입이나 삭제와 같은 작업을 할 때는, 역순으로 처리해야 합니다.

'Range object' 카테고리의 다른 글

[Range 개체] Columns속성  (0) 2023.07.08
[Range 개체] Column속성  (0) 2023.07.07
[Range 개체] Rows속성  (0) 2023.07.05
[Range 개체] Row속성  (0) 2023.07.05
[Range개체] Address속성  (0) 2023.07.04