엑셀에서 자동화를 한다는건 사실 이유가 뻔 합니다. 처리해야 할 셀이 엄청나게 많거나 일반적인 함수로 연산이 불가한 경우 입니다. 그 중 오늘은 엄청나게 많은 데이터에 대한 자동화 처리를 위하여 반복문을 사용하는 방법을 알아보겠습니다.
우선 셀의 영역을 설정을 해야 합니다.
앞장에서 설명 하였던 영역을 설정하는 부분을 참고하세요.
[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 와 같이 작성되는 경우가 많은데요. 이런식의 색상 코드를 이용하여 셀의 색상을 채우는 방법을 알아보겠습니다.
도움이 되셨다면 공감을 부탁드립니다~
그럼 이만
'DEV > VBA' 카테고리의 다른 글
[VBA] 엑셀 시트에 있는 모든 그림 한번에 삭제하기 (13) | 2019.08.21 |
---|---|
[VBA] 문자열 가지고 놀기 (0) | 2019.08.12 |
[vba] 현재 엑셀 시트의 선택한 영역을 vba 스크립트에서 가져오기 (0) | 2019.08.01 |
[vba] 자동화를 위하여 엑셀의 영역 설정하는 방법 (0) | 2019.07.12 |
엑셀 VBA 시작하기 (0) | 2019.06.01 |