반응형

 

엑셀에서 자동화를 한다는건 사실 이유가 뻔 합니다. 처리해야 할 셀이 엄청나게 많거나 일반적인 함수로 연산이 불가한 경우 입니다. 그 중 오늘은 엄청나게 많은 데이터에 대한 자동화 처리를 위하여 반복문을 사용하는 방법을 알아보겠습니다.

 

우선 셀의 영역을 설정을 해야 합니다.

앞장에서 설명 하였던 영역을 설정하는 부분을 참고하세요.

 

[vba] 자동화를 위하여 엑셀의 영역 설정하는 방법

https://diy-dev-design.tistory.com/20?category=791049

 

Sub checkError()

    Dim asht As Worksheet
    Dim rngA As Range
    
    Set asht = ActiveSheet
    
    Set rngA = asht.Range("a3")
    Set rngA = asht.Range(rngA, rngA.End(xlDown))
        
End Sub

요렇게요. 그럼 a3 부터 a 열의 제일 마지막 행까지 설정이 됩니다.

 

반복문으로 무었을 할거냐면요. 

a 열에 있는 단어를 모두 소문자로 바꿔서 b 열에 넣을 겁니다.

 

엑셀 기본 제공 함수에는 왜인지 모르겠지만 이 기능을 지원하지 않는것 같습니다. 그러면 vba 로 하면 되는거죠.

 

위에 작성한 함수 아래 부분에 for 구문을 이용해서 위에서 말했던 소문자로 바꾸눈 기능을 개발해보겠습니다.

 

Sub checkError()

    Dim asht As Worksheet
    Dim rngA As Range
    
    Set asht = ActiveSheet
    
    Set rngA = asht.Range("a3")
    Set rngA = asht.Range(rngA, rngA.End(xlDown))
    
    '반복문 추가
    For Each c in rngA
    	c.offset(0,1).value = LCase(c.value)    
    next c
    
End Sub

요렇게 하면 됩니다.

 

For 뒤에 Each c 라는 부분이 있는데요. rngA 라는 Range의 각각의 셀을 c 로 하겠다는 의미 입니다. 모든 셀이 각각 턴마다 c 에 대응되고 나면 종료가 됩니다.

 

아래쪽에 Next c 라는 부분을 만나면 다음 셀로 넘어가게 되죠. 즉 For ~ Next 사이의 코드가 계속해서 반복됩니다. 언제까지요? 네. 모든 셀이 한번씩 지나가는 동안요.

 

그 아랫줄에 오늘 설명하기로 하였던 하나의 명령어가 나왔습니다.

 

바로 offset 입니다.

 

문장을 그래도 해석해 보면 c 라는 셀로 부터 아래쪽으로 0칸, 오른 쪽으로 1칸 위치에 있는 셀의 value, 즉 값에다가 c 의 값을 이용하여 LCase - 소문자로 변경하는 함수 - 로 세팅하라는 의미 입니다. 

 

문장이 좀 이상한데요. 어쨌든, LCase 는 소문자로, 반대로 UCase 는 뒤의 괄호안의 문자를 모두 대분자로 변경하라는 의미입니다. 즉 소문자로 변경한 c 의 값을 c 의 오른쪽 첫번째 칸에 입력하라는 의미가 되겠습니다.

 

offset 은 특정 셀에 대하여 사용할 수 있는 명령어 인데요. offset은 두개의 인자를 입력받는데 첫번째 인자는 세로 방향, 두번째 인자는 가로방향입니다. 0 이면 제자리이고요. 가로에 대하여 - 는 왼쪽, + 는 오른쪽입니다. 세로방향에 대하여 -는 위쪽, + 는 아래쪽입니다. 

 

특정 셀에 대하여 오른쪽으로 두칸, 아래로 한칸이면 c.offset(1,2) 가 됩니다.

특정 셀에 대하여 왼쪽으로 세칸, 위로 두칸이면 c.offset(-2, -3) 이라고 작성하면 됩니다. 

 

offset 은 아주 자주 사용되고 유용한 명령어 이므로 꼭 기억해두시길 바랍니다.

 

다음 강좌에서는 셀의 색상을 칠하는 방법, 셀 안의 글자 색을 변경하는 방법을 알아보겠습니다.

또한 색상의 경우 16진수 값으로 FF143F 와 같이 작성되는 경우가 많은데요. 이런식의 색상 코드를 이용하여 셀의 색상을 채우는 방법을 알아보겠습니다.

 

도움이 되셨다면 공감을 부탁드립니다~

 

그럼 이만

 

 

 

반응형

+ Recent posts