선택을 피하는 방법의 몇 가지 예
사용 Dim
'D 변수
Dim rng as Range
Set
변수를 필요한 범위로 단일 셀 범위를 참조하는 방법에는 여러 가지가 있습니다
Set rng = Range("A1")
Set rng = Cells(1,1)
Set rng = Range("NamedRange")
또는 다중 셀 범위
Set rng = Range("A1:B10")
Set rng = Range("A1", "B10")
Set rng = Range(Cells(1,1), Cells(10,2))
Set rng = Range("AnotherNamedRange")
Set rng = Range("A1").Resize(10,2)
당신은 할 수 있습니다 받는 바로 가기를 사용하는 Evaluate
방법,하지만이 덜 효율적이며 일반적으로 생산 코드에 피해야한다.
Set rng = [A1]
Set rng = [A1:B10]
위의 모든 예는 활성 시트의 셀을 나타 냅니다. 활성 시트로만 작업하고 싶지 않다면 Worksheet
변수 를 흐리게 처리하는 것이 좋습니다
Dim ws As Worksheet
Set ws = Worksheets("Sheet1")
Set rng = ws.Cells(1,1)
With ws
Set rng = .Range(.Cells(1,1), .Cells(2,10))
End With
당신이 경우 않는 작업하려는 ActiveSheet
, 명확하게 그것을 명시하는 것이 가장 좋습니다. 그러나 일부 Worksheet
방법은 활성 시트를 변경하므로 주의 하십시오.
Set rng = ActiveSheet.Range("A1")
다시 이것은 활성 통합 문서를 나타냅니다 . ActiveWorkbook
또는 로만 작업하고 싶지 않으면 변수 ThisWorkbook
를 흐리게 처리하는 것이 좋습니다 Workbook
.
Dim wb As Workbook
Set wb = Application.Workbooks("Book1")
Set rng = wb.Worksheets("Sheet1").Range("A1")
당신이 경우 않는 작업하려는 ActiveWorkbook
, 명확하게 그것을 명시하는 것이 가장 좋습니다. 그러나 많은 WorkBook
방법이 활성화 된 책을 변경하므로 주의 하십시오.
Set rng = ActiveWorkbook.Worksheets("Sheet1").Range("A1")
ThisWorkbook
객체를 사용 하여 실행 코드가 포함 된 책을 참조 할 수도 있습니다 .
Set rng = ThisWorkbook.Worksheets("Sheet1").Range("A1")
일반적인 (나쁜) 코드는 책을 열고 데이터를 얻은 다음 다시 닫는 것입니다.
이것은 나쁘다 :
Sub foo()
Dim v as Variant
Workbooks("Book1.xlsx").Sheets(1).Range("A1").Clear
Workbooks.Open("C:\Path\To\SomeClosedBook.xlsx")
v = ActiveWorkbook.Sheets(1).Range("A1").Value
Workbooks("SomeAlreadyOpenBook.xlsx").Activate
ActiveWorkbook.Sheets("SomeSheet").Range("A1").Value = v
Workbooks(2).Activate
ActiveWorkbook.Close()
End Sub
그리고 더 좋을 것입니다 :
Sub foo()
Dim v as Variant
Dim wb1 as Workbook
Dim wb2 as Workbook
Set wb1 = Workbooks("SomeAlreadyOpenBook.xlsx")
Set wb2 = Workbooks.Open("C:\Path\To\SomeClosedBook.xlsx")
v = wb2.Sheets("SomeSheet").Range("A1").Value
wb1.Sheets("SomeOtherSheet").Range("A1").Value = v
wb2.Close()
End Sub
범위 변수로 범위를 Sub
S 및 Function
S에 전달하십시오.
Sub ClearRange(r as Range)
r.ClearContents
'....
End Sub
Sub MyMacro()
Dim rng as Range
Set rng = ThisWorkbook.Worksheets("SomeSheet").Range("A1:B10")
ClearRange rng
End Sub
또한 메소드 (예 : Find
및 Copy
)를 변수에 적용해야 합니다.
Dim rng1 As Range
Dim rng2 As Range
Set rng1 = ThisWorkbook.Worksheets("SomeSheet").Range("A1:A10")
Set rng2 = ThisWorkbook.Worksheets("SomeSheet").Range("B1:B10")
rng1.Copy rng2
셀 범위를 반복하는 경우 범위 값을 변형 배열에 먼저 복사하고 반복하는 것이 좋습니다 (빠른).
Dim dat As Variant
Dim rng As Range
Dim i As Long
Set rng = ThisWorkbook.Worksheets("SomeSheet").Range("A1:A10000")
dat = rng.Value ' dat is now array (1 to 10000, 1 to 1)
for i = LBound(dat, 1) to UBound(dat, 1)
dat(i,1) = dat(i,1) * 10 'or whatever operation you need to perform
next
rng.Value = dat ' put new values back on sheet
이것은 가능한 것에 대한 작은 맛보기입니다.
Select
및 / 또는ActiveSheet
기타를 사용할 때 불가피한 경우가 있다는 점에 유의해야합니다 . 내가 찾은 예는 다음과 같습니다. stackoverflow.com/questions/22796286/…