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
Reference
이 문제에 관하여(EXCEL VBA -Range형에 대해서), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/e-katayama/items/97024a58b891507af632
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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
Reference
이 문제에 관하여(EXCEL VBA -Range형에 대해서), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/e-katayama/items/97024a58b891507af632
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Function Test(a As Range)
Test = a.Cells(1, 1)
End Function
Sub Macro1()
Dim a As Range
If TypeName(Selection) <> "Range" Then
Exit Sub
End If
Set a = Selection
End Sub
Sub Macro1()
Dim a As Range
Dim shtAct As Worksheet
Set shtAct = ActiveSheet
Set a = shtAct.Range("テスト")
End Sub
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
Reference
이 문제에 관하여(EXCEL VBA -Range형에 대해서), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/e-katayama/items/97024a58b891507af632
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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 객체를 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
Reference
이 문제에 관하여(EXCEL VBA -Range형에 대해서), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/e-katayama/items/97024a58b891507af632텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)