본문 바로가기

VBA로 행ㆍ열 삽입, 삭제하기(entirerow, entirecolumn, resize활용)

택이형. 2023. 2. 8.

 

데이터로우를 구축하거나, 가공할 때 행열을 삽입하거나 삭제하는 작업을 하게 됩니다. 또한 특정 조건에 맞는 행의 수를 삽입하거나 열의 수를 삭제함으로써 원하는 형태로 가공하는 작업을 진행하곤 하는데요. 오늘은 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 반복문으로 다섯 칸씩 띄어서 행을 삽입해 보도록 하겠습니다.

 

 

VBA 반복문 1탄(for~next 사용하기)

『 오늘은 VBA 반복문에 대해 알아보려고 하는데요. 반복문은 반복적인 작업을 대신해주는 만능키라고 할 수 있어요. 반복문은 지정한 횟수만큼, 혹은 무한으로 사용된 코드를 반복하게 만들어

lst914.tistory.com

 

코드는 다음과 같습니다.

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를 이용하면 손쉽게 해결할 수 있습니다.

 

VBA 범위 선택하기 2탄 (Cells, Offset, Resize 조합)

『 Cells, Offset, Resize를 활용하여 엑셀의 범위를 자유자재로 선택할 수 있어요. 각 속성이 가지는 특징과 예시를 통해 범위선택이 자연스럽게 익혀지도록 연습해 보세요. 』 오늘은 VBA 범위 선택

lst914.tistory.com

 

그럼 위와 마찬가지로 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 결과
Delete 결과

 

Delete를 사용하여 삭제한 결과입니다. 빨간색 상자에 있던 행과 열이 정상적으로 삭제된 것을 확인할 수 있습니다. 

 

그렇다면 마지막으로 실습했던 행삽입 결과를 다시 원래대로 되돌리기 위해서는 어떻게 해야 할까요?

노란색 음영으로 삽입되었던 행들을 삭제해주기만 하면 원래대로 되돌릴 수 있는 것을 알 수 있는데요.

여기에서는 앞서 배웠던 Specialcells 메서드를 사용하여 빈셀만 선택 후 Delete를 이용하여 삭제해 주면 해결됩니다.

 

VBA 범위 선택하기 4탄 (Specialcells 사용법)

『 Specialcells는 엑셀 VBA에서 약방의 감초같은 역할을 하는데요. 다양한 옵션을 사용할 수 있기때문에 범위선택을 위한 유용한 역할을 하고 있어요. 빈셀이나 수식이 입력된 셀 등 특수한 상황에

lst914.tistory.com

 

Sub 행열삭제()


Dim i As Long


Range("a1", "D25").SpecialCells(xlCellTypeBlanks).Delete
'A1 ~ D25의 범위에서 빈셀만을 선택하여 삭제


End Sub

 

빈셀만 선택하여 삭제
빈셀만 선택하여 삭제

 

적용된 결과를 한번 살펴볼까요?

 

Delete 적용 결과
Delete 적용 결과

 

우리가 처음 시작했던 예제의 모습으로 돌아온 것을 확인할 수 있습니다.

 


마치며

지금까지 데이터상에 행과 열을 삽입, 삭제하는 코드를 작성해 보았습니다.

기본적인 문법만 숙지하고 조금의 연습을 더해주신다면 내가 원하는 코드를 만들어 낼 수 있습니다.

엑셀 VBA은 기술이 아닌 기능이기 때문에 자꾸 연습하다 보면 자연스럽게 실력이 향상되게 되어 있습니다.

지금 당장 어렵다고 포기하지 마시고, 쉬운 것부터라도 반복적인 연습을 하시기를 권해드립니다.

 

 

▼▼▼함께 읽으면 좋은 글▼▼▼

 

VBA로 셀병합 해제 후 빈셀 채우기(빈셀 채우기와 찰떡궁합!)

『 병합되어 있는 표는 피벗테이블을 사용할 때 오류 발생이 높은 형태로 알려져 있습니다. 오류를 최소화하기 위해서는 셀병합은 되도록이면 사용하지 않는 습관을 들이는 것이 가장 좋을 것

lst914.tistory.com

 

VBA 빈셀 채우기!(피벗테이블 오류 최소화 방법)

『 피벗테이블을 사용할 때 가장 주의하여야 할 점은 셀병합으로 인해 숫자가 누락되는 것입니다. 또한 합계가 되는 기준셀의 명칭이 없게 되면 우리가 원하는 값에 도달할 수 없다는 것이죠.

lst914.tistory.com

 

VBA 반복문 1탄(for~next 사용하기)

『 오늘은 VBA 반복문에 대해 알아보려고 하는데요. 반복문은 반복적인 작업을 대신해주는 만능키라고 할 수 있어요. 반복문은 지정한 횟수만큼, 혹은 무한으로 사용된 코드를 반복하게 만들어

lst914.tistory.com

 

VBA 반복문 2탄(For each ~ Next 사용하기)

『 For ~ next문과 For each ~ next문만 자유롭게 사용가능하다면 업무자동화에 한 발짝 더 다가섰다고 할 수 있습니다. 그만큼 사용빈도가 높고 중요한 내용이라고 할 수 있습니다. 업무자동화를 위해

lst914.tistory.com

 

한 가지 결과에도 다양한 방법은 존재한다.

댓글