[엑셀 VBA] FIND 함수 , FINDNEXT , DO ~LOOP Until 복합 사용 법.

2019. 12. 17. 00:27업무 스킬/Excel VBA

728x90

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를 써주고 무엇다음에 찾을 지만 정해주면된다.

그럼 코드를 실행하면? 아래와 같이 실행 되는 것을 볼 수 있다. 끝!

 

728x90