[엑셀 VBA] FIND 함수 , FINDNEXT , DO ~LOOP Until 복합 사용 법.
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를 써주고 무엇다음에 찾을 지만 정해주면된다.
그럼 코드를 실행하면? 아래와 같이 실행 되는 것을 볼 수 있다. 끝!