2019. 12. 17. 00:27ㆍ업무 스킬/Excel VBA
VBA에서 자주 쓰는 FIND 및 FINDNEXT 함수 그리고 DO ~ LOOP Until 함수를 사용하여,
병합된 CELL을 병합 해제 하고 빈 셀에 값을 채워 넣는 코드를 만들어 보자.
위와 같이 B열의 고객 칸에 병합되어 있는 CELL들이 있을 경우 이 CELL들의 병합을 해제하고
A사 CELL에는 모두 A사를 채워 놓고 B사 영역에는 모두 B사를 채워 놓고 싶다.
자 코드의 순서는 아래와 같이 짜야 한다.
1) 병합 해제 -> Unmerge
2) 빈칸을 찾는다 - > FIND(What:="")
3) 다음 빈칸을 찾는다 - >FINDNEXT(After:=)
병합된 CELL의 병합을 해제하면 많은 빈셀들이 생겨나기 때문에 각 빈칸을 찾아줘야 한다.
4) 언제 까지 빈칸을 찾는가? 빈칸이 없을 때 까지 -> Do ~ Loop Until
자 위에 나열 된 순서대로 코드를 짜보자 우선 각 코드의 개념부터 알아보면
SET Rng_All = Range("B2").Currentregion ' Data의 시작인 "B2" Range의 연결된 모든 DATA를 선택한다.
[FIND] 매서드의 매개변수는 두가지만 알면된다. 바로 What:= / Lookat:= 이다.
[What] 의 경우 당연히 무엇을 찾을지 나타내는 거고 [Lookat]의 경우 [xlpart] [xlwhole] 두가지로 나위는데
찾는 글자의 부분 일치를 찾을 것인지 전체 일치를 찾을 것인지로 나뉜다. [Find]이 두가지의 매개변수만 알면
사용하는데 큰 문제는 없을 것이다.
SET Rng_Empty = Rng_All.Find(what:="") ' 내가 정해준 영역에서 빈셀들을 찾아 Rng_Empty로 할당해라
If Not Rng_Empty is Nothing Then ' 만약 아니면 빈셀이 아무것도 = 이중 부정 즉, 빈셀이 있다면
Rng_Empty =Rng_Empty.offset(-1).value ' 빈셀이 있으면 빈셀 위의 값을 적용해라
Set Rng_Empty = Rng_ALL.FindNext(after:=Rng_Empty) '빈셀을 채웠으면 다시 빈셀을 찾아라
FindNext 함수의 경우 매우 간단하다 FindNext를 써주고 무엇다음에 찾을 지만 정해주면된다.
그럼 코드를 실행하면? 아래와 같이 실행 되는 것을 볼 수 있다. 끝!
'업무 스킬 > Excel VBA' 카테고리의 다른 글
[엑셀 VBA] CHART X,Y축 글씨 크기 변경 (0) | 2020.04.13 |
---|---|
[엑셀 VBA] 빈 열(또는 행) 삭제하기 (2) | 2019.12.29 |
[엑셀 VBA] Function (Optional 키워드) 생략 가능한 인수를 사용하는 사용자 정의 함수 (0) | 2019.12.15 |
[엑셀 VBA] FOR~NEXT문(순환문) 사용법 (0) | 2019.12.03 |
[엑셀 VBA] PasteSpecial. 선택하여 붙여넣기 (0) | 2019.11.28 |