범위의 크기 및 병합여부를 확인하는 명령문 :: MeasureRange 함수
구문
MeasureRange ( 범위 )
설명
엑셀 MeasureRange 함수는 선택한 범위의 넓이와 높이, 그리고 병합여부를 반환하는 명령문입니다. 범위와 높이는 엑셀의 기본 단위인 pt (포인트)로 계산됩니다. pt로 반환된 값은 VBA 내장함수인 CentimetersToPoints 또는 InchesToPoints 를 사용하여 cm(센치미터) 또는 inch(인치)로 변환할 수 있습니다.
MeasureRange는 {넓이, 높이, 병합여부}로 배열을 반환합니다. 사용예제는 아래와 같습니다.
= MeasureRange("A1")(0) '// A1의 넓이를 반환합니다.
= MeasureRange("A1")(2) '// A1셀의 병합여부를 반환합니다.
= MeasureRange("A1")(0) / Application.CentimetersToPoints(1) '// A1셀의 넓이를 cm로 반환합니다.
= MeasureRange("A1)(1) / Application.InchesToPoints(1) '// A1셀의 높이를 inch로 반환합니다.
= MeasureRange("A1")(2) '// A1셀의 병합여부를 반환합니다.
= MeasureRange("A1")(0) / Application.CentimetersToPoints(1) '// A1셀의 넓이를 cm로 반환합니다.
= MeasureRange("A1)(1) / Application.InchesToPoints(1) '// A1셀의 높이를 inch로 반환합니다.
패치노트
- FirctCellOnly 인수를 추가합니다.
FirstCellOnly (as Boolean) : True 일 경우 범위의 첫번째 셀의 크기만 계산합니다.
예제파일 다운로드
오빠두엑셀의 강의 예제파일은 여러분을 위해 자유롭게 제공하고 있습니다.
- [VBA예제] MeasureRange 명령문예제파일
MeasureRange 명령문 전체 코드
'############################################################### '오빠두엑셀 VBA 사용자지정함수 (https://www.oppadu.com) '■ MeasureRange 명령문 '■ 선택된 범위의 병합여부를 확인합니다. '■ 인수 설명 '_____________Rng : 크기 및 병합여부를 확인할 셀(범위)입니다. '_____________FirstCellOnly : True일 경우 범위의 첫번째 셀의 크기만 반환합니다. '■ 반환값 '_____________배열을 반환합니다. {넓이(pt), 높이(pt), 병합여부(Boolean)} '############################################################### Function MeasureRange(Rng As Range, Optional FirstCellOnly As Boolean = False) Dim WS As Worksheet Dim iCol As Long: Dim iRow As Long Dim iCols As Long: Dim iRows As Long Dim dblW As Double: Dim dblH As Double Dim i As Long Dim vaMeasure As Variant With Rng Set WS = .Parent iCol = .Column iRow = .Row If FirstCellOnly = False Then iCols = Rng.Columns.Count Else iCols = .Offset(, 1).Column - iCol If FirstCellOnly = False Then iRows = Rng.Rows.Count Else: iRows = .Offset(1, 0).Row - iRow End With For i = 1 To iCols dblW = dblW + WS.Cells(iRow, iCol + i - 1).ColumnWidth Next For i = 1 To iRows dblH = dblH + WS.Cells(iRow + i - 1, iCol).RowHeight Next ReDim vaMeasure(0 To 2) vaMeasure(0) = dblW vaMeasure(1) = dblH vaMeasure(2) = Rng.MergeCells MeasureRange = vaMeasure End Function
MeasureRange 함수 상세설명
사용예제
Sub Test() Dim vaMeasure As Variant vaMeasure = MeasureRange(Selection) MsgBox "선택한 셀의 넓이는 " & vaMeasure(0) & "pt 입니다." & vbNewLine & _ "선택한 셀의 높이는 " & vaMeasure(1) & "pt 입니다." & vbNewLine & _ "선택한 셀의 병합여부는 [ " & vaMeasure(2) & " ] 입니다." End Sub
명령문 동작원리
MeasureRange 함수는 범위의 Offset 속성을 이용한 명령문입니다. 2칸 x 2칸으로 병합된 범위를 예제로 알아보겠습니다.
- 병합된 범위의 기준셀인 'A1'에서 .Cells 속성을 사용해 우측으로 1칸 이동시 'B1'셀로 이동합니다.
- 반면 병합된 범위의 기준셀인 'A1'에서 .Offset 속성을 사용해 우측으로 1칸 이동시 병합된 셀을 건너뛴 'C1'셀로 이동합니다.
.Offset 속성은 병합된 셀만큼 건너뛰어 이동합니다. 즉, Offset 속성을 사용해 우측 또는 아래로 이동한 셀과 이동하기 전 기준셀의 차이를 확인한 뒤, 병합된 셀의 넓이/높이를 계산합니다. 반면, 셀의 .MergeCells 속성을 사용하면 선택된 셀의 병합여부를 확인할 수 있습니다.
- 선택된 셀을 기준으로 변수를 생성합니다.
WS : 선택된 셀의 대상 워크시트입니다.
iCol/iRow : 선택된 셀의 행/열번호입니다.
iCols/iRows : 선택된 셀의 행/열 개수입니다.With Rng Set WS = .Parent iCol = .Column iRow = .Row iCols = .Offset(, 1).Column - iCol iRows = .Offset(1, 0).Row - iRow End With
- 선택된 셀의 행/열번호를 기준으로 .Cells 속성을 사용해 한칸씩 이동하며 넓이와 높이를 계산합니다. 만약 셀이 병합되지 않은 셀이라면 For문은 1번만 반복할 것이고, 셀이 병합되어 있다면 병합된 셀의 가로/세로 개수만큼 For문을 반복합니다.
For i = 1 To iCols dblW = dblW + WS.Cells(iRow, iCol + i - 1).ColumnWidth Next For i = 1 To iRows dblH = dblH + WS.Cells(iRow + i - 1, iCol).RowHeight Next
- MeasureRange 명령문의 결과값을 반환합니다.
= MeasureRange(0) : 선택된 셀의 넓이를 pt로 반환합니다.
= MeasureRange(1) : 선택된 셀의 높이를 pt로 반환합니다.
= MeasureRange(2) : 선택된 셀의 병합여부를 Boolean 값으로 반환합니다.ReDim vaMeasure(0 To 2) vaMeasure(0) = dblW vaMeasure(1) = dblH vaMeasure(2) = Rng.MergeCells MeasureRange = vaMeasure