엑셀을 다뤄본 사람이라면 알겠지만 엑셀에는 Cell을 선택하는 다양한 방법이 존재한다. 참고링크를 보면서 알게 된 내용이지만 Cell을 선택하는 방법 중 Range를 각각 Select하는 방법은 VBA 프로그램에서 속도를 저하시키는 주범이라고 한다. Range를 직접 Select하는 방법보다 SpecialCells, CurrentRegion, UsedRange와 같은 영역 설정 기능들을 활용하는게 효율적이다.
이번 포스팅에서는 엑셀 VBA에서 자주 사용하는 영역 설정 코드 SpecialCells, CurrentRegion, UsedRange에 대한 내용을 알아본다. 설명을 위해 아래와 같이 임의의 데이터를 엑셀 시트에 입력해두었다.
1. CurrentRegion
사용영역만을 선택하는 대표적인 기능. 결과에서 보듯이 아래 코드를 실행시 데이터가 입력 된 연속 된 영역이 모두 선택된다.(연속 된 영역이라는게 중요)
<코드>
#데이터가 입력 된 부분만 Copy
ActiveSheet.Range("A:F").CurrentRegion.Select
2. UsedRange
UsedRange는 1번 CurrentRegion과 마찬가지로 해당 시트에서 데이터가 입력 된 연속 된 영역을 지정한다. CurrentRegion과 차이점은 CurrentRegion의 코드 앞 부분은 반드시 엑셀의 셀 영역을 나타내는 Range 개체여야 한다.
UsedRange는 아래에서 보듯이 WorkSheet 개체를 통해 접근한다.
결과는 1번과 동일하다.
<코드>
#활성화 된 시트에서 사용하고 있는 연속 된 영역만 선택
ActiveSheet.UsedRange.Select
3. SpecialCells
이름에서 짐작할 수 있는 내용이지만 어떤 조건들을 만족하는 특정 셀 영역을 설정하는 코드이다. 1,2번의 연속 된 영역만 설정할 수 잇는 CurrentRegion, UsedRange와 다르게 조건에 따라 여러 영역을 설정할 수 있다.
사용법은 아래와 같다.
* 사용법 영역(Range 개체).Specialcells(Celltype, Value) |
-. .SpecialCells 앞에 오는 코드는 무조건 영역(Range)를 나타내는 코드이다.
-. SpecialCells 함수의 매개변수인 Celltype, Value는 아래와 같은 형식을 가질 수 있다. Celltype의 경우 종류가 많지만 자주 쓰이는 부분만 정리했다.
* CellType : 셀 타입에 따라 설정하는 옵션
Celltype | 설명 |
xlCellTypeBlank | 비어 있는 셀 선택 |
xlCellTypeConstants | 상수를 포함 한 셀 선택 |
xlCellTypeLastCell | 사용 범위에서 마지막 셀 지정하기 |
xlCellTypeVisible | 보이는 모든 셀 지정 |
xlCellTypeFormulas | 수식을 포함하고 있는 셀 지정 |
xlCellTypeSameFormatConditions | 동일한 서식 셀 지정 |
* Value : 값에 따라 영역을 설정하는 옵션
Celltype | 설명 |
xlErrors | 에러가 있는 셀 지정 |
xlLogical | 수식이 있는 셀 지정 |
xlNumbers | 숫자에 해당하는 셀 지정 |
xlTextValues | 텍스트에 해당 하는 셀 지정 |
SpecialCells 예시를 들기 위해 위 엑셀 파일을 그대로 사용해 코드를 작성해보자.
예시1)
#활성화 된 시트에서 사용영역 중 빈칸만 선택
ActiveSheet.UsedRange.SpecialCells(xlCellTypeBlanks).Select
예시2)
#A열에서 상수만 선택
Range("A:A").SpecialCells(xlCellTypeConstants).Select
참고링크1 : https://m.blog.daum.net/laviedor/16931452
참고링크2 : https://mainia.tistory.com/1276
'코딩 > 엑셀,VBA' 카테고리의 다른 글
[엑셀/VBA] Object(개체)와 각 Obejct간의 관계 (0) | 2022.03.12 |
---|---|
[엑셀/VBA] 엑셀 Database SQL 사용하기 1편 - ADODB.Recordset (0) | 2021.10.20 |
[엑셀/VBA] 엑셀 다른 파일에서 데이터 가져오기 : Getobject 함수 사용하기 (22) | 2021.08.19 |
[엑셀/VBA] 엑셀 시트별 모든 데이터 통합하기(합치기) (5) | 2021.08.16 |
[엑셀/VBA] 정적 배열, 동적 배열(ReDim, ReDim Preserve) (0) | 2021.08.12 |