엑셀 MeasureRange 함수 사용법 및 전체 명령문 :: 셀 넓이 병합여부 확인

범위의 넓이/높이 및 셀 병합여부를 확인하는 MeasureRange 함수의 사용법 및 전체명령문 동작원리를 알아봅니다.

작성자 :
오빠두엑셀
최종 수정일 : 2020. 10. 12. 02:19
URL 복사
메모 남기기 : (4)

범위의 크기 및 병합여부를 확인하는 명령문 :: 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로 반환합니다.
패치노트
  • FirctCellOnly 인수를 추가합니다.
    FirstCellOnly (as Boolean) : True 일 경우 범위의 첫번째 셀의 크기만 계산합니다.

예제파일 다운로드

오빠두엑셀의 강의 예제파일은 여러분을 위해 자유롭게 제공하고 있습니다.


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 속성을 사용하면 선택된 셀의 병합여부를 확인할 수 있습니다.

  1. 선택된 셀을 기준으로 변수를 생성합니다.
    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
  2. 선택된 셀의 행/열번호를 기준으로 .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
  3. 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
5 3 투표
게시글평점
4 댓글
Inline Feedbacks
모든 댓글 보기
4
0
여러분의 생각을 댓글로 남겨주세요.x