테이블 새 행 자동 생성 및 삭제 automatically add new row at table(Listobject) with Worksheet_SelectionChange
엑셀 VBA (Excel VBA)2020. 3. 26. 12:41
코드는 근본적으로 어떻게 동작하는가 관찰하기 쉽게 거의 그대로 넣었기 때문에 보기쉽게 정리되어 있지는 않습니다.
개개인의 환경에 따라서 변경 및 응용하여 사용하시기 바랍니다.
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
'엑셀 VBA (Excel VBA)' 카테고리의 다른 글
엑셀 VBA 매크로기록 으로 작성된 코딩을 단축 해 보기 (0) | 2020.05.19 |
---|---|
엑셀 vba 포함 문자 바꾸기/지우기 (0) | 2020.05.12 |
엑셀 vba find 함수 응용 특정 행 지우기 (0) | 2020.05.08 |
엑셀 vba 텍스트박스(TextBox) 클릭 시 텍스트 전체 선택 (0) | 2020.04.27 |
엑셀 vba 코드 편집 주석(comment) 단축키(shortcut) 설정 하기 (0) | 2020.03.27 |