VBA로 행ㆍ열 삽입, 삭제하기(entirerow, entirecolumn, resize활용)
데이터로우를 구축하거나, 가공할 때 행열을 삽입하거나 삭제하는 작업을 하게 됩니다. 또한 특정 조건에 맞는 행의 수를 삽입하거나 열의 수를 삭제함으로써 원하는 형태로 가공하는 작업을 진행하곤 하는데요. 오늘은 VBA를 통해 행과 열을 삽입하고 삭제하는 방법에 대해 알아보도록 하겠습니다.
VBA로 행, 열 삽입하는 프로시저 만들기
특정위치의 행 혹은 열을 추가하는 프로시저를 알아보도록 하겠습니다.
row(행) 혹은 column(열) 삽입의 기본문법은 다음과 같습니다.
행(row) 삽입 문법
셀 위치.entireRow.insert |
열(column) 삽입 문법
셀 위치.entireculumn.insert |
그럼 예시를 한번 살펴볼까요?
A1셀부터 L21셀까지 데이터가 들어있다고 가정해 보시죠. 위에서 알아본 행, 열 삽입 기본문법을 적용하여 A7셀에 1개의 행을 삽입하고, D열 앞에 1개의 열을 삽입하기 위해 다음과 같은 프로시저를 작성하였습니다.
Sub 행열삽입테스트() Range("A7").EntireRow.Insert 'A7셀의 위치에서 1개의 행을 삽입 Range("D1").EntireColumn.Insert 'D1셀의 위치에서 1개의 열을 삽입 End Sub |
결과를 확인해 볼까요?
7번째 행과 4번째 열에 새로운 행과 열이 삽입되는 것을 확인할 수 있습니다.
그렇다면 한 단계 더 나아가 보겠습니다.
처음 예시에서 앞서 배운 For ~ next 반복문으로 다섯 칸씩 띄어서 행을 삽입해 보도록 하겠습니다.
코드는 다음과 같습니다.
Sub 행열삽입() Dim i As Long For i = 7 To 25 Step 6 ' 7부터 25까지 6의 간격을 두고 반복 Cells(i, 1).EntireRow.Insert '7행, 13행, 19행의 위치에서 전체 행을 삽입 Next End Sub |
결과를 한번 살펴볼까요?
우리가 원했던 대로 5칸씩 띄워서 행을 삽입한 결과를 확인할 수 있습니다.
하지만 여기서 한 가지 생각해보아야 하는 문제가 있습니다. 바로 G~L열에 위치한 데이터인데요.
만약 G ~ L행은 변화를 주지 않고 A ~ D범위의 행만 삽입하고 싶다면 어떻게 할까요?
맞습니다. 앞서 배웠던 Resize를 이용하면 손쉽게 해결할 수 있습니다.
그럼 위와 마찬가지로 5칸씩 띄워서 행을 삽입하되, A ~ D열에 위치한 데이터만 반영이 되도록 매크로를 만들어 볼까요?
Sub 행열삽입() Dim i As Long For i = 7 To 25 Step 6 Cells(i, 1).Resize(, 4).Insert Next End Sub |
결과를 한번 보시죠!
앞선 코드와 달라진 점이 하나 있는데요. 바로 Resize를 사용하였다는 것입니다.
Resize를 사용함으로써 전체행이 아닌 1 ~ 4열에 해당하는 행에만 삽입이 되도록 코드를 변경하였습니다.
해당 차이점을 인지하시고 각각의 상황에 맞게 적용하시면 되겠습니다.
VBA로 행, 열 삭제하는 프로시저 만들기
이번엔 특정위치의 행 혹은 열을 삭제하는 프로시저를 알아볼게요. 기본적으로 위에서 사용한 문법과 동일한 형태를 띠고 있지만 삽입을 위한 매써드인 Insert 대신 삭제를 위한 매서드인 delete로 변경하여 사용하시면 됩니다.
row(행) 혹은 column(열) 삭제의 기본문법은 다음과 같아요.
행(row) 삭제 문법
셀 위치.entireRow.delete |
열(column) 삭제 문법
셀 위치.entireculumn.delete |
예시는 위에서 사용한 내용을 가지고 동일하게 실습하도록 하겠습니다.
Sub 행열삽입테스트() Range("A7").EntireRow.delete 'A7셀의 위치에서 1개의 행을 삭제 Range("D1").EntireColumn.delete 'D1셀의 위치에서 1개의 열을 삭제 End Sub |
Delete를 사용하여 삭제한 결과입니다. 빨간색 상자에 있던 행과 열이 정상적으로 삭제된 것을 확인할 수 있습니다.
그렇다면 마지막으로 실습했던 행삽입 결과를 다시 원래대로 되돌리기 위해서는 어떻게 해야 할까요?
노란색 음영으로 삽입되었던 행들을 삭제해주기만 하면 원래대로 되돌릴 수 있는 것을 알 수 있는데요.
여기에서는 앞서 배웠던 Specialcells 메서드를 사용하여 빈셀만 선택 후 Delete를 이용하여 삭제해 주면 해결됩니다.
Sub 행열삭제() Dim i As Long Range("a1", "D25").SpecialCells(xlCellTypeBlanks).Delete 'A1 ~ D25의 범위에서 빈셀만을 선택하여 삭제 End Sub |
적용된 결과를 한번 살펴볼까요?
우리가 처음 시작했던 예제의 모습으로 돌아온 것을 확인할 수 있습니다.
마치며
지금까지 데이터상에 행과 열을 삽입, 삭제하는 코드를 작성해 보았습니다.
기본적인 문법만 숙지하고 조금의 연습을 더해주신다면 내가 원하는 코드를 만들어 낼 수 있습니다.
엑셀 VBA은 기술이 아닌 기능이기 때문에 자꾸 연습하다 보면 자연스럽게 실력이 향상되게 되어 있습니다.
지금 당장 어렵다고 포기하지 마시고, 쉬운 것부터라도 반복적인 연습을 하시기를 권해드립니다.
▼▼▼함께 읽으면 좋은 글▼▼▼
한 가지 결과에도 다양한 방법은 존재한다.
댓글