VBA 코딩 패턴: Named Range (명명된 범위)
VBA 코딩시 Range의 참조주소가 변경되더라도 Named Range (명명된 범위)를 사용하면 참조주소 변경과 상관없이 소스코드가 변경되지 않도록 할 수 있다. 다음 내용을 살펴보자.
1. 절대주소를 사용한 Range 참조
Excel VBA에서 Range를 참조하는 여러 방법중 가장 자주 사용하는 방법은 다음과 같다.
Dim sVal As String sVal = Range("B2").Value2 Debug.Print sVal
Range(“B2”)에서 “B2″는 엑셀 시트상의 cell 절대주소를 나타낸다. 시트의 형태를 변경하여 행을 추가하거나 열을 추가하는 경우에 “B2″를 “B3” 또는 “C2” 등으로 변경해야 한다. cell 절대주소가 VBA 코드상에 한 곳에만 있다면 그나마 간단하게 변경할 수 있으나, 여러 파일, 여러 procedure, function등에 퍼져 있다면 코드를 고치는 작업이 간단하지 않다.
참조할 Range(범위)의 변경이 VBA 코드 변경에 영향을 주지 않으려면, Range(범위)에 이름을 지정하여 VBA 코드에서는 cell 절대주소가 아닌 이름을 참조하게 하고, 참조할 위치가 변경되면 해당 이름에 지정된 cell 주소를 변경하면 된다.
2. 이름을 사용한 Range 참조
2.1. Named Range (명명된 범위)생성
먼저 다음 과정을 실행하여 Range에 이름을 만든다. 수식 > 이름 관리자 > 새로 만들기… 를 실행한다. (다음 그림 참조)
“새 이름” 창에서 이름과 범위, 설명, 참조 대상을 설정한다.
여기에서 “범위”는 해당 이름을 참조할 유효범위를 의미하고 둘 중 하나를 선택할 수 있다.
- 시트(예: Sheet1): 해당 시트에서 작성한 VBA 코드에서만 이름 참조가능
- 통합문서: 전체 시트, 모듈, Class 등에서 이름 참조가능
참고로, 시트에 정의된 이름은 시트를 복사할 때 함께 복사된다. 이때 여러 시트에서 동일한 이름을 참조할 필요가 있다면 “시트”로 설정하고 동일한 이름을 참조할 필요가 없다면 “통합문서”로 설정하면 된다.이름을 생성하면 다음과 같이 결과를 확인할 수 있다.
이름을 정의한 Cell을 선택하면 이름 상자에 명칭이 보여진다.
이름을 정의하지 않은 cell을 선택하면 이름 상자에 해당 cell의 절대 주소가 표시된다.
2.2. 이름 참조 코드 작성
이름 정의를 마친 후, 정의한 이름을 참조하여 VBA 코드를 작성한다. 간단한 예시는 다음과 같다.
Dim sVal As String sVal = Range("BaseRange").Value2 Debug.Print sVal
2.3. 이름 사용의 장점
절대주소가 변경되는 경우 해당 이름이 참조하는 절대주소를 변경하면 된다. VBA 소스코드 전체를 찾아서 바꿀 필요가 없어 간편하다.
열이나 행이 추가되거나 삭제되는 경우 이름이 참조하는 절대주소는 자동으로 변경된다. 예를 들어 “B2” cell을 참조하는 이름이 있을 때, 1행과 2행 사이에 행을 하나 추가하면 자동으로 “B3″으로 변경된다.
VBA코드를 읽을 때 가독성이 좋아진다. 소스코드상에 “B2″가 어떤 의미인지를 알려면 시트를 열고 살펴봐야 하지만, “BaseRange”, “TableListBase”, “ColumnListBase”, “ValueListBase” 등의 이름을 사용하면 시트를 열어볼 필요없이 의미파악이 훨씬 간단해 진다.
추가적인 내용은 Excel 이름 관리자 사용 (microsoft.com) 에서 확인할 수 있다.
이상으로 Range(범위)에 이름을 사용하는 방법과 장점을 살펴보았다. VBA 코딩에 도움이 되길 바라며, 궁금한 점은 댓글을 남겨주기 바란다.