- 최초 작성일: 2000-12-14
- 최종 수정일: 2026-09-30
- 조회수: 11 회
- 작성자: 권현욱 (엑셀러)
- 강의 제목: 행과 열 삽입/삭제하기
들어가기 전에
오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.
이번 시간에는 질문 하나를 살펴봅니다.
시트에 어떤 내용이 들어 있습니다. 한 1000행 정도 됩니다.
그런데 각 행과 행 사에에 빈행을 2줄씩 삽입해야 하는데 이것을
간편하게 해결할 수는 없는지요?
VBA를 이용하면 된다고 누가 그러던데…
바쁘신 줄 압니다만 부디 가르쳐 주십시오.
고맙습니다.
행과 열 삽입/삭제하기
핵심 요약: 행·열 삽입과 삭제
마지막 행에서 위로 거꾸로 순환하며 행을 삽입하거나, CountA로 비어 있는지 검사해 삭제합니다.
- 1단계: UsedRange로 사용된 영역의 행 수를 구합니다.
- 2단계: 마지막 행부터 위로 For 순환하며 EntireRow.Insert로 빈 행을 삽입합니다.
- 3단계: CountA가 0인 행을 찾아 삭제하고, 열은 EntireColumn으로 같은 방식으로 처리합니다.
Step 1: 행 삽입하기
VBA로 해결가능하다고만 이야기하고 그 방법은 안 알려주셨나 봅니다. ^^ 행과 행 사이뿐만 아니라 열 방향으로도 가능합니다. 아래의 버튼을 눌러서 직접 확인하고 다시 돌아오세요.
확인해 보셨지요? 정말이지 Excel과 VBA는 Powerful합니다. 아직도 여러분 주변에 VBA가 뭔지 모르는 분이 있다면(적어도 직장인이라면 Excel을 모르는 분이 없을 것이니까…) 하루라도 빨리 접하시도록 잘 꼬드겨서(?) 함께 하시기 바랍니다. 좋은 것은 나만 가지고 있어서는 안됩니다. 여럿이서 함께 나누어야 더 빛이 납니다.
각설하고… 코드를 보도록 하지요. 먼저 행을 삽입하는 코드입니다. 아마 생각보다 훨씬 간단할 것입니다.
Sub InsertRows()
Dim r As Long
Dim i As Long
Dim j As Integer
r = Sheets("WorkPlace").UsedRange.Rows.Count
'//WorkPlace 시트에서 사용된 범위의 행 수를 카운팅 하여 r에 담습니다.
'//여기서 UsedRange 속성은 지정한 워크시트에서 사용된 영역의 Range 개체를 되돌려주는
'//Property(속성) 입니다. 위의 버튼을 눌러 보세요. 그러면 현재 시트에서 사용된 영역을
'//모두 Select 할 것입니다.
j = Val(InputBox("삽입할 행 수를 입력하세요", "삽입행 수//Exceller"))
If j <= 0 Then Exit Sub
'//몇 개의 행을 삽입할 것인지 정보를 입력받습니다. 입력받은 값이 0 이하이면 프로시저를
'//빠져 나갑니다.
For i = r To 5 Step -1
Range(Cells(i, 1), Cells(i + j - 1, 1)).EntireRow.Insert Shift:=xlShiftDown
'//반복적인 작업이 필요하니까 For~Next 순환문을 사용했습니다. 행 삽입을 할 때
'//몇 개의 행을 선택한 채 "삽입"하면 지정된 행 수만큼 삽입이 되지요? 바로 이것을
'//코드로 만들면 위와 같이 됩니다.
'//여기에서... UsedRange의 맨 마지막 라인에서부터 위로 올라가면서 차례대로 행을
'//삽입해 준 것을 눈여겨 보시기 바랍니다.
Next i
End Sub
이렇게 몇 줄 안되는 코드가 그토록 많은 수작업을 대체하는 것입니다. 어떻습니까? 이제 VBA를 배워야 겠다는 생각이 팍팍 드시지요? ^^ '왜 내가 그때 VBA를 배우지 않았던가!!!' 땅을 치고 후회하지 마시고 Exceller가 강조할 때 못이기는 척 하면서 열심히 따라오시기 바랍니다. 참 아무리 생각해도 Exceller는 지극정성 입니다. 사실 요즘 같아서는 몸도 마음도 몹시 피폐해져(?) 있는데 자주 격려를 주시는 분들 때문에 강좌를 때려 치지도 못하고 있습니다. ^^
Step 2: 삽입한 행 삭제하기
이제 삽입한 행을 다시 원래대로 되돌리는 코드를 만들어 볼까요? 이것은 행 삽입하는 코드보다 더 간단합니다. 만사가 그렇지요. 건물을 지을 때는 수십년, 심지어는 수백년씩 걸려도 제거할 때에는 몇 초면 되지 않습니까.
Sub DelRows()
Dim r As Long
Dim i As Long
r = Sheets("WorkPlace").UsedRange.Rows.Count
For i = r To 5 Step -1
If Application.WorksheetFunction.CountA(Rows(i)) = 0 Then Rows(i).Delete
'//다른 것은 행 삽입할 때와 똑같고 이 부분만 다릅니다. UsedRange 중에서 행 전체를 검사해서
'//아무 값도 들어있지 않은 행이면 삭제합니다.
'//여기서도 마찬가지로 사용된 영역의 맨 마지막 라인부터 검사를 해서 삭제를 한다는 것과,
'//빈 라인인지 아닌지를 체크하기 위해 CountA() 함수를 사용하였다는 점을 눈여겨 보세요.
Next i
End Sub
Step 3: 열 삽입/삭제하기
행을 자유자재로 삽입하고 삭제할 수 있으니까 당연히 Column에 대해서도 가능하겠지요? 행 삽입/삭제와 거의 같은데 단지 속성만 바꾸어 주면 됩니다. 따라서 열 삽입/삭제하는 방법은 아래의 코드를 참고하세요. 이 부분에 대한 해설은 생략합니다.
Sub InsertColumns()
Dim c As Integer
Dim i As Integer
Dim j As Integer
On Error Resume Next
c = Sheets("WorkPlace").UsedRange.Columns.Count
j = Val(InputBox("삽입할 열 수를 입력하세요", "삽입열 수//Exceller"))
If j <= 0 Then Exit Sub
For i = c To 2 Step -1
Range(Cells(1, i), Cells(1, i + j - 1)).EntireColumn.Insert
Next i
End Sub
아래의 코드는 위에서 삽입한 열을 삭제하는 코드입니다. 역시 해설은 불필요할 듯…
Sub DelColumns()
Dim c As Integer
Dim i As Integer
c = Sheets("WorkPlace").UsedRange.Columns.Count
For i = c To 1 Step -1
If Application.WorksheetFunction.CountA(Columns(i)) = 0 Then Columns(i).Delete
Next i
End Sub
행이나 열을 삭제할 때 Application.CountA 대신 Application.WorksheetFunction.CountA를 쓰는 것이 정확한 표현입니다. 또한 이 방식은 셀 내용이 없는 행만 빈 행으로 판단하므로, 서식만 있는 행이나 수식 결과가 빈 문자열인 행은 비어 있지 않은 것으로 취급됩니다.
마무리
다음에 또…
정리 — 행·열 삽입/삭제 핵심
| 구분 | 사용한 코드 | 역할 |
|---|---|---|
| 사용 영역 | Sheets("WorkPlace").UsedRange.Rows.Count | 사용된 행 수 구하기 |
| 행 삽입 | Range(Cells(i,1),Cells(i+j-1,1)).EntireRow.Insert | j개 행 삽입 |
| 행 삭제 | If CountA(Rows(i)) = 0 Then Rows(i).Delete | 빈 행 삭제 |
| 열 삽입 | .EntireColumn.Insert | j개 열 삽입 |
| 열 삭제 | If CountA(Columns(i)) = 0 Then Columns(i).Delete | 빈 열 삭제 |
자주 묻는 질문 (FAQ)
Q1. 행을 삽입하거나 삭제할 때 왜 마지막 행부터 시작하나요?
위에서부터 처리하면 삽입·삭제로 행 번호가 바뀌어 대상이 어긋나므로 아래에서 위로 올라가며 처리합니다.
Q2. UsedRange는 무엇인가요?
워크시트에서 사용된 영역 전체를 Range 개체로 돌려주는 속성입니다.
Q3. 빈 행은 어떻게 판별하나요?
CountA 함수로 행 전체의 비어 있지 않은 셀 수를 세어 0이면 빈 행으로 판단합니다.
마치며
아래에서 위로 순환하면서 삽입하거나 삭제하면 수천 행의 반복 작업도 몇 줄의 코드로 끝낼 수 있습니다.