엑셀을 사용하는 목적 자체가 근본적으로 문서를 만들기 위함은 아니다 보니 세로 또는 가로로 굉장히 길게 데이터가 나열되어 있는 경우가 많습니다. 우리는 vba 를 이용하여 자동화를 할 것이기 때문에 어디부터 어디까지 자동화를 할것인지 영역을 설정을 해주어야 할 필요가 있는데요. 일반적으로 제가 자주 사용하는 패턴을 몇개 올려보려 합니다.
우선 alt+F11 을 눌러 vba 편집창을 열어줍니다.
좌측 트리구조에서 현재 엑셀 파일에 포함되어 있는 시트의 이름과 마지막에 ThisWorkbook 이라는 트리가 보일텐데요. 저는 보통 ThisWorkbook 라는 부분에 코드를 작성합니다. 왜나하면 현재 엑셀 파일내의 모든 시트에 자동화를 하기에 적당한 위치이기 때문입니다. 대신 스크립트 동작을 위하여 어떤 시트에서 동작을 할 것인지를 설정 해 주어야 합니다. 해당 위치를 더블클릭하면 스크립트 에디터 창이 열리게 됩니다.
아래는 제가 가장 많이 사용하는 패턴의 시트, 영역 설정하는 코드 입니다.
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
Dim 은 엑셀에서 변수를 정의할때 사용하는 명령어 고요. Dim 뒤에 있는 asht 가 변수 명이 되겠습니다.
뒤에 As Worksheet 라는 것은 앞에 선언한 asht 가 워크시트를 저장할 변수임을 알려주게 됩니다.
역시 rngA 는 변수이며 Range 즉 엑셀의 어떤 영역을 지칭합니다. 그 아래에 set 으로 시작하는 부분에서 위에 정의한 변수에 실제 유의미한 정보를 설정해 주게 됩니다.
asht 는 현재 활성화된 워크시트를,
rngA 는 일단 현재 시트의 a3 칸을 지정한 뒤 다시 a3 으로부터 아래 마지막까지를 설정하는 명령입니다.
이렇게 하면 특정 위치로부터 행의 가장 아래까지 설정이 가능합니다. 행이 몇행까지 있는지 알지 못하거나 경우에따라 변경이 될 수 있는 상황에서 이렇게 작성하면 일일이 코드 수정을 하지 않아도 되는 장점이 있습니다.
이런식으로 작성할 때 가끔 문제가 발생할 수 있는 여지가 있는데요, a 열에 어떤 행이 중간에 값이 비어 있을때 입니다. Range.End(xlDown) 이라는 명령은 값이 있는 마지막까지를 탐색하기 때문이죠. 매번 마지막 행을 확인할 필요가 없으니 편리한 기능이기는 한데 기준이 되는 a 열의 중간에 값이 비어있을 수도 있다면 이렇게는 안됩니다. (중간에 빈칸이 필요한 경우 의미 없는 문자열(예> N/A)을 삽입하여 자동화 시 걸러내는 방법을 사용하는 것이 좋습니다)
만약 시작부터 끝을 알고 있는 경우, 또는 빈 칸이 포함되어 있는 경우 아래와 같이 정의를 해주어야 하죠.
Dim rngA As Range
Set rngA = asht.Range("a3","a3000")
이렇게 하면 a3 ~ a3000 까지 각 셀에 값이 있건 없건 영역으로 설정이 됩니다.
제가 소스 코드를 ThisWorkbook 에 작성을 한다고 하였고 그 때문에 스크립트가 동작할 시트가 어떤 시트인지를 지정해주어야 한다고 하였는데요. 만약 특정 시트에 바로 스크립트를 작성할 것이라면 아래와 같이 간단하게 영역을 설정 할 수 있습니다.
Sub checkError()
Dim rngA As Range
Set rngA = [a3:a3000]
End Sub
바로 대괄호 [ ] 를 이용하여 설정하는 방법입니다. 동일하게 a3 ~ a3000 까지를 설정하는 코드입니다. 시트는 현재 이미 선택이 되어 있기 때문에 별도로 시트를 설정할 필요가 없죠.
특정 셀 하나를 설정하려면 아래와 같이하면 됩니다.
Sub checkError()
Dim rngA As Range
Set rngA = [a125]
End Sub
저는 대부분의 자동화 코드를 이런식으로 시작합니다.
그 아래 부분에 For 구문을 이용하여 필요한 기능을 적용할 수 있습니다.
다음 편에서는 For 구문을 이용하여 반복 처리하는 부분과 offset 이라는 기능을 이용하여 선택된 셀로 부터 특정 위치에 있는 셀을 지정하는 방법을 알아보겠습니다.
뎃글, 공감 은 블로그 작성자에게 큰 힘이 된답니다. |
2019/07/12 - [DEV/VBA] - [vba] For 구문 이용하기와 offset 사용 해 보기
2020/02/05 - [DEV/VBA] - [VBA] 셀의 넓이를 픽셀로 지정하기 (set column width by pixels)
'DEV > VBA' 카테고리의 다른 글
[VBA] 엑셀 시트에 있는 모든 그림 한번에 삭제하기 (13) | 2019.08.21 |
---|---|
[VBA] 문자열 가지고 놀기 (0) | 2019.08.12 |
[vba] 현재 엑셀 시트의 선택한 영역을 vba 스크립트에서 가져오기 (0) | 2019.08.01 |
[vba] For 구문 이용하기와 offset 사용 해 보기 (0) | 2019.07.12 |
엑셀 VBA 시작하기 (0) | 2019.06.01 |