EXCEL VBA

[ 엑셀 VBA ] 셀 병합 해제하고 자동 채우기

카루루1007 2024. 9. 26. 13:13
728x90
반응형

엑셀로 자료를 만들 때 아래 그림과 같이 셀 병합을 사용하는 경우가 있습니다.

 

셀 병합을 사용하여 자료를 만들면 보기는 좋습니다.

하지만 데이터로 활용한다는 측면에서 볼 때는 좋지는 않습니다.

 

위 그림과 같은 자료를 활용하기 위해서는

병합을 풀고 아래 그림과 같이 데이터를 만들어 주어야 합니다.

 

엑셀의 기본기능으로도 이 작업이 가능합니다.

병합을 해제하고

F5를 눌러 옵션을 선택

빈 셀을 선택하고

수식을 입력한 다음

함수식을 입력하면 됩니다.

 

이 절차를 VBA를 사용하여

간단하게 사용할 수 있도록 해보겠습니다.

 

 구현기능

 

1. 셀 범위 선택 및 병합 해제는 엑셀 기본 기능 사용

2. 병합 해제되었을 경우 생기는 빈 셀은 위쪽 값 또는 좌측값으로 채우기

 

실질적으로 2번 기능을 구현하는 코드를 작성하겠습니다.

 

반응형

 병합 해제 후 빈 셀을 위쪽 값으로 채우기

 

Sub FillBlankCellsWithAboveValue()
    Dim cell As Range

    Set Rng = Selection

    For Each cell In Rng
        If IsEmpty(cell) And cell.Row > Rng.Row Then
            cell.Value = cell.Offset(-1, 0).Value
        End If
    Next cell
End Sub

 

먼저 셀 범위를 선택한 후 선택 범위를 변수에 넣어 줍니다.

Set Rng = Selection

 

그다음 선택된 범위의 셀을 순회합니다.

각 셀을 순회하며 조건을 검사할 겁니다.

For Each cell In Rng
...
Next cell

 

IsEmpty(cell)을 통해 셀이 비어있는지 확인합니다.

cell.Row : 현재 반복하고 있는 셀의 행 번호

Rng.Row : 선택된 전체 영역의 첫 번째 행의 번호

즉, 현재 처리 중인 셀의 행 번호가 선택된 범위의 첫 번째 행 번호보다 클 때만 실행되도록 하는 코드입니다.

 

처리 중인 셀의 행 번호와 선택 범위의 첫 번째 행 번호가 같다면

그리고 처리 중인 셀이 비어있다면 해당 셀은 맨 위의 셀임에도 비어있는 것이 되므로

채울 값이 없습니다.

For Each cell In Rng
	If IsEmpty(cell) And cell.Row > Rng.Row Then
		...
	End If
Next cell

 

마지막으로 현재 처리 중인 셀이 비어있고,

행 번호가 선택된 범위의 맨 위의 행이 아니라면

바로 위 셀 값으로 처리 중인 셀에 값을 넣습니다.

cell.Value = cell.Offset(-1, 0).Value

 

※ Offset 함수의 설명 : 엑셀 VBA 셀 범위 선택하기, VBA resize와 VBA offset 활용

 

728x90

 병합 해제 후 빈 셀을 왼쪽 값으로 채우기

 

아래 그림과 같은 경우도 있습니다.

셀 병합이 가로 방향으로 되어 있는 경우도 마찬가지로

데이터의 조작을 위해서는 셀 병합을 해제하고 왼쪽의 셀 값으로 채워야 합니다.

 

셀 병합을 풀고 채운 모습입니다.

 

이를 VBA로 구현하면 위 코드에서 

Row를 Column으로 바꾸고

Offset 함수의 인자만 바꾸어 주면 됩니다.

Sub FillBlankCellsWithLeftValue()
    Dim cell As Range

    Set Rng = Selection

    For Each cell In Rng
        If IsEmpty(cell) And cell.Column > Rng.Column Then
            cell.Value = cell.Offset(0, -1).Value
        End If
    Next cell
End Sub

여기를 방문하시면 더 많은 엑셀 관련 자료를 확인할 수 있습니다.

엑셀 공부하기
VBA 공부하기

728x90
반응형