For~Next 순환구문에 이어 Do~Loop순환구문으로 VBA의 기본적 문법은 끝나게 된다 For~Next 순환구문은 정해진 횟수만큼 순환하지만 Do~Loop순환구문은 정해진 횟수없이 순환할때마다 어떤 조건을 분석(Logical Expression)하여 순환을 더 진행할것인가..중단할것인가를 결정한다 Do~Loop 순환구문은 아래와 같이 다양한 형식을 갖고 있으나 각자가 좋아하는 형식으로 작성을 해도 아무지장이 없다 Do ... Loop 라고 작성하면 컴퓨터가 다운될때까지 순환한다 왜냐하면 어디에서 중단하라는 명령문이 없기때문이다 아래와 같이 중단을 위한 명령문이 들어가는 곳이 다양하다 Do ... Loop While Logical Expression Do ... Loop Until Logical Expression Do If Logical Expression Then Exit Do Loop Do While Logical Expression ... Loop Do Until Logical Expression ... Loop 위와 같이 다양하게 있다.. 그러나 어느것이나 같은 목적으로 사용할수 있을것이다
아래의 버튼을 크릭하면 숫자와 알파벳이 섞인 문장이 만들어 진다 이 문장에서 숫자만 뽑아내고 싶을 경우도 있을것이다 이런 경우 각각의 문자를 순환하면서 문자를 검사하여 숫자만 뽑아내서 모으면 된다 순환문이 필수적인것이다 아래에 위의 다섯개의 순환브록문으로 원하는 작업을 작성해보자 어떤 형식을 사용하던 가능하다는것을 알수 있다
이번에는 암호를 어느 정도횟수까지만 입력가능하게 순환문으로 통제해보도록 하자
어떤 순환문형식을 선택하느냐가 문제가 아니라 논리식과 변수를 적절히 어느 곳에 위치하느냐의 응용력과 이해의 문제인것이다
위의 순환문들도 유용하지만 엑셀프로그래밍에 있어서 집합체를 구성하고 있는 각각의 요소오브젝트를 순환하는 작업도 중요하다 아래의 엑셀시트상에 각각의 행을 3개간격..혹은 4개 간격으로 어떤 작업을 하고 싶다고 할때 전체 범위에서 각각의 행(오브젝트)를 하나,하나 접근하여야 한다 이럴때 For Each Object In Collecion Object가 유용한것이다
Sub colorEvery3Row() Dim rngRow As Range, iX As Integer Range("A1:A14").EntireRow.Interior.ColorIndex = xlNone For Each rngRow In ActiveSheet.Rows If iX >= 15 Then Exit Sub If rngRow.Row Mod 3 = 0 Then rngRow.Interior.ColorIndex = 15 iX = iX + 1 End If Next End Sub
ActiveSheet.Rows 는 전체쉬트의 모든 행(여러개의 행으로 구성되었으니까..집합체오브젝트라고 한다) 그 집합체내의 하나하나의 행(Row)를 순환하면서 각각의 행을 만났을때 몇번째행인지 rngRow.Row 로 확인을 한후 MOD 연산자로서 확인한후(워크시트함수중 MOD함수를 기억하시는지..!!> 색을 칠할것인지 말것인지 결정하는 순환문이였다 VBA의 기본문법은 모두 완료하였으니 엑셀프로그래밍으로 진행되며 이때 집합체오브젝트(Collection Object)와 각각의 오브젝트가 계속 나오게 될것이다 do loop