EXCEL VBA -Range형에 대해서

Range형에 대해서



이 기사에서는 EXCEL VBA에서 자주 사용하는 Range 형의 취급에 대해 기술한다.

범위 유형 선언



Range 유형을 선언합니다.
※Range형의 변수를 선언하지 않고, Sheet1.Cells(1,1).??라고 기입하면 멤버 후보는 표시되지 않습니다.
Sheet1.Cells(1,1)을 Range 변수에 대입하고 나서 사용하면 멤버의 후보가 표시되게 됩니다.

range 형 선언
Dim a As Range

Set a = Sheet1.Cells(1,1)

다양한 Range 형의 취득 방법



인수로서 Range 형을 취득



계산식에 기술되고 대상 셀 범위를 인수로 수신합니다.

예:

Function Test(a As Range)
    Test = a.Cells(1, 1)
End Function

선택된 Range 얻기



셀이 선택한 범위를 Range로 가져옵니다.
Selection의 타입명이 Range인지 판정하여 처리를 실시해 주세요.
Sub Macro1()
    Dim a As Range

    If TypeName(Selection) <> "Range" Then
        Exit Sub
    End If

    Set a = Selection
End Sub

이름에서 Range 가져오기



셀에 지정된 이름을 기준으로 Range를 가져옵니다.

Sub Macro1()
    Dim a As Range
    Dim shtAct As Worksheet

    Set shtAct = ActiveSheet

    Set a = shtAct.Range("テスト")

End Sub

Range 참조 범위 확인



Range.Address에 참조하는 범위가 저장됩니다.
Sub Macro1()
    Dim a As Range
    Dim shtAct As Worksheet

    Set shtAct = ActiveSheet

    Set a = shtAct.Range("テスト")

    Debug.Print a.Address
End Sub

결과:


Worksheet의 UsedRange 취급에 대해



UsedRange는 저장된 사용 범위를 얻는 데 편리하고 자주 사용되지만 조심해야 할 수 있습니다.
사용 범위가 Cell(1,1)로 시작하지 않는 경우가 있으며, 그럴 때 UsedRange(1,1)의 위치는 Worksheet.Cells(1,1)과 같은 위치가 아니게 됩니다.
그 때문에, 기점을 기준으로 생각하고 있던 코드에 버그가 발생하는 요원이 됩니다.

이 문제를 해결하는 방법에는 여러 가지가 있습니다.
・EXCEL 시트의 사용 범위 개시 위치가 반드시 Worksheet.Cells(1,1)이 되도록 수정해, 그 전제로 처리를 실시한다
·UsedRange를 취득할 때에 아래의 코드로 반드시 기입하도록 하고, Worksheet.Cells(1,1)가 기점이 되도록 한다
Sub Macro1()
    Dim a As Range
    Dim shtAct As Worksheet

    Set shtAct = ActiveSheet

    Set a = shtAct.Range(shtAct.Cells(1, 1), shtAct.UsedRange(shtAct.UsedRange.Rows.Count, shtAct.UsedRange.Columns.Count))

End Sub

Range에 고속 취득, 대입



Range에의 값의 취득, 대입은 배열을 사용하는 편이 빠르다.
데이터 건수가 적은 경우는 고려하지 않아도 되지만, 고속화하고 싶은 경우는 기억해 두면 편리합니다.

Range 객체를 Variant 타입의 객체에 할당하면 다차원 배열로 복사됩니다.
Variant 객체의 값을 편집하고 Range 객체에 다시 저장하면 값만 업데이트됩니다.
※ 오브젝트를 세트하는 것은 아니기 때문에, Set 는 불필요
Sub Macro1()
    Dim a As Range
    Dim shtAct As Worksheet
    Dim vals As Variant

    Set shtAct = ActiveSheet

    Set a = shtAct.Range(shtAct.Cells(1, 1), shtAct.Cells(10, 10))

    vals = a

    vals(2, 2) = "10"

    a = vals
End Sub

좋은 웹페이지 즐겨찾기