준이로그

테이블 범위의 마지막 행 바로 밑의 셀 범위를 선택하면 새 행이 추가되는 코드입니다.


코드는 근본적으로 어떻게 동작하는가 관찰하기 쉽게 거의 그대로 넣었기 때문에 보기쉽게 정리되어 있지는 않습니다.

개개인의 환경에 따라서 변경 및 응용하여 사용하시기 바랍니다.


worksheet에서 선택한 셀의 위치를 기준으로 코드를 실행합니다.

테이블(listobject) 범위 외에 다른 셀을 클릭하면 값이 아예 없는 모든 행을 삭제하는 del_emptyrow를 실행합니다.

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
'테이블 마지막 행 바로 밑의 셀 범위를 선택하면 새 행 추가 
If Target.Count = 1 And Not Intersect(Target, ListObjects(1).HeaderRowRange.Offset(ListObjects(1).ListColumns(1).Range.Count)) Is Nothing Then 
    With ListObjects(1).ListRows.Add 
        '새 행을 추가하면서 실행할 코드가 있으면 여기에 작성합니다 
    End With 
'테이블을 벗어나면 값이 없는 행 삭제 
ElseIf Intersect(Target, ListObjects(1).DataBodyRange) Is Nothing Then 
    Call del_emptyrow '값이 없는 빈 행을 삭제하는 function 입니다.
End If 

End Sub

 

Function del_emptyrow() 

Dim emptyrows As Range 
Dim a As Range 
'테이블 전체 범위를 행 단위로 루프를 돌려서 빈 행만 삭제 
For Each a In ListObjects(1).ListColumns(1).DataBodyRange 
    If emptyrows Is Nothing And WorksheetFunction.CountA(Intersect(ListObjects(1).DataBodyRange, a.EntireRow)) = 0 Then 
        Set emptyrows = Intersect(ListObjects(1).DataBodyRange, a.EntireRow) 
    ElseIf Not emptyrows Is Nothing And WorksheetFunction.CountA(Intersect(ListObjects(1).DataBodyRange, a.EntireRow)) = 0 Then 
        Set emptyrows = Union(emptyrows, Intersect(ListObjects(1).DataBodyRange, a.EntireRow)) 
    End If 
Next 

If Not emptyrows Is Nothing Then emptyrows.Delete 

End Function