공부중
VBA 행 숨기기 / 셀 영역을 문자열로 대입 / 다중영역
또돌근
2022. 11. 10. 15:38
반응형
VBA를 갑자기 쓸 일이 생겨, 여기저기 찾아봐도 무슨말인지 하나도 모르겠지만 어떻게든 짜깁기 한 결과물
예시
A | B | C | D | E | F | |
1 | 지출내역 | |||||
2 | 구분 | 항목 | 금액 | 세부내역 | ||
3 | 총무 | 관리비 | ||||
4 | 총무 | 식비 | 10,000 | 도시락구매 | ||
5 | 복리후생비 | 통신비 | 3,500 | |||
6 | 복리후생비 | 간식비 | ||||
7 | ..... | ..... | ..... | ..... |
만약 이러한 지출내역서가 있고,
제출하기 위해서 금액과 세부내역이 둘 다 비어있는 행은 '숨기기' 처리 해서 제출을 한다고 했을 때,
3행의 관리비는 금액과 세부내역이 비어있다.
4행의 식비는 금액과 세부내역 모두 채워져있다.
5행의 통신비는 금액만 채워져있고 세부내역이 비어있다.
6행의 간식비는 금액과 세부내역이 비어있다.
이럴 때 숨기기 처리 해야하는 행은 3행과 6행이다.
결과물은
A | B | C | D | E | F | |
1 | 지출내역 | |||||
2 | 구분 | 항목 | 금액 | 세부내역 | ||
4 | 총무 | 식비 | 10,000 | 도시락구매 | ||
5 | 복리후생비 | 통신비 | 3,500 | |||
7 | ..... | ..... | ..... | ...... | ||
8 | ..... | ..... | ..... | .... | ||
...... | ..... | ..... | ..... |
이렇게 돼야한다.
여기저기 짜깁기한 VBA 코드다.
물론 이것보다 더 간결하고 좋은 코드가 있을 것이라 생각하지만, 찾기가 너무 귀찮으므로...
Sub 행숨기기()
Dim rng As Range
Dim cell1 As Range
Dim cell2 As Range
Dim num As String
Set rng = ActiveSheet.Range("C3:C20")
For Each cell1 In rng.Cells
num = Mid(cell1.Address, 4, 2)
Set cell2 = ActiveSheet.Range("D" & num)
If cell1.Value = "" And cell2.Value = "" Then
cell1.EntireRow.Hidden = True
Else
cell1.EntireRow.Hidden = False
End If
Next cell1
End Sub
C열과 D열 한 행에 있어야 하고, 두 셀이 둘 다 비어있는 행만 골라서 숨기기 처리해야한다.
For Each 로 돌리고 있는 범위(C3:C20) 에서
매번 바뀌는 cell1의 주소에서 숫자부분만 텍스트 변수로 받고
cell2 변수에 "알파벳" & 숫자텍스트 로 지정해버렸다.
cell1변수의 셀 주소가 $C$3 일 때, cell2 는 "D" & "3" 이 되는 셈.
그리고 If 문으로 둘 다 비어있을 때만 해당 행을 숨기기 처리하는 것으로 했다.
반응형