본문 바로가기

100_Apps/VBA, Excel, Google spreadsheet

📌103 Excel VBA 📌 다양한 범위 선택하기

Range 개체를 이용하여 셀 (또는 범위)를 선택하는 것은 매크로를 개발할 때 가장 핵심이 된다고 합니다 그래서 반드시 이해하고 싶습니다.

🚗 셀 하나를 선택할 때

A1 셀을 참조하는 경우, 다음과 같이 세 가지 코드를 사용할 수 있어요~

① Range("A1")   → ActiveSheet.Range("A1")와 같은 뜻 입니다
② Cells(1,1)
③ Cells(1,"A")

Range 개체에 참조할 셀 주소를 직접 전달합니다

Cells 속성행 인덱스 번호열 인덱스 번호를 전달해 1행, 1열 위치인 A1 셀을 참조하도록 지정합니다. Cells 속성 앞에 아무런 상위 개체가 전달되지 않았다면 ActiveSheet 개체가 생략된 것으로 이해하면 됩니다. Cells 속성 Range 개체 하위에서도 사용할 수 있으며, 다음 코드도 A1 셀을 참조합니다

Range("A1:A10").Cells(1)

  위 코드는 A1:A10 범위의 첫 번째  셀을 의미하므로, A1 셀을 지정한 것과 같으며
Range("A1:A10").Cells(1,1)에서 두 번째 열 번호(빨간색)가 생략된 것입니다. Cells 속성에서 두 번째 열 번호가 생략되면 1이 생략된 것으로 간주합니다

Cells 속성의 열 인덱스 번호는 열 주소를 의미하는 텍스트 값으로 전달해도 됩니다.

Cells 속성
1) 단 하나의 셀을 참조할 때 주로 사용
2) For ... Next 순환문에서 자주 사용

🚗🚓 연속된 범위를 선택할 때

A1 셀에서 A10 셀까지 연속된 범위를 참조할 때는 다음과 같이 두 가지 코드를 사용할 수 있습니다

① Range("A1:A10")
② Range("A1","A10")

 Range 개체 안에서 큰따옴표(" ") 로 묶어서 셀 범위를 지정합니다 

Range 개체 에서 쉼표(,) 구분자를 이용해 셀 범위를 지정합니다. 첫 번째 셀주소는 표의 왼쪽 상단 셀 주소를 의미하고, 두 번째 셀 주소는 표의 오른쪽 하단 셀 주소를 의미합니다. 두 주소를 연결하는 전체 범위를 반환하게 됩니다. 그러므로 A1:A10 범위를 참조하는 것이 됩니다. 이 방법은 수식을 작성할 때 셀을 참조하는 방법과는 다르며, 매우 자주 사용하는 방식이라고 합니다. 잘 기억해 둘 필요가 있습니다

🚍🚒🛴떨어진 범위(=다중 범위)를 선택할 대

Range("A1:A10,C1:C10")
Union(Range("A1:A10"),Range("C1:C10"))

범위 A1:A10과 범위 C1:C10 와 같이 떨어진 범위를 한 번에 선택하려고 할 때는 
큰따옴표(" " ) 안에서 참조할 범위를 쉼표(,) 구분자로 구분해 사용하거나

Application 개체의 Union 매서드를 이용하면 됩니다

 

코드 예제 : 선택된 범위가 《연속된 범위》 인지, 아니면 《다중 범위》 인지를 확인하려면 다음과 같이 코드를 입력합니다

Sub 연속범위_다중범위_구별()
  Dim 선택범위 As Range
Dim 주소() As Variant, i As Integer
Dim 메시지 As String

If Selection.Areas.Count >1 Then
    For Each 선택범위 In Selection.Areas
           ReDim Preserve 주소(i)
          주소(i) = 선택범위.Address
           i = i +1
    Next
    메시지 = "다중범위를 선택했습니다"
    메시지 = 메시지 & vbCr & vbCr
    메시지 = 메시지 & Join(주소,vbCr)
Else
   If Selection.Count = 1 Then
        메시지 = "선택된 범위가 1개 입니다"
   Else
        메시지 = "연속된 범위를 선택했습니다"
  End If
    메시지 = 메시지 & vbCr & vbCr
    메시지 = 메시지 & Selection.Address

End If

Msgbox 메시지

End Sub

실행결과

위의 코드를 설명해 보겠습니다

🚗 다른 워크시트의 범위를 선택할 때

Range 개체가 독립적으로 사용되면 Activesheet 개체가 모두 생략된 것으로 이해하시면 됩니다. 
즉, Range("A1")   는 ActiveSheet.Range("A1")와 같은 뜻 입니다.

그러므로 다른 워크시트의 범위를 선택하려면 해당 워크시트 개체[WorkSheets("Sheet2").]를 먼저 지정해 주어야 합니다

WorkSheets("Sheet2").Range("A1:A10")

위의 코드는 Range 개체의 상위 개체인 Worksheets 컬렉션을 이용해 Sheet2 워크시트의 A1:A10 범위를 참조합니다
Worksheets 컬렉션 대신 Sheets 컬렉션을 사용해도 동일한 결과를 얻을 수 있습니다

Sheets("Sheet2").Range("A1:A10")

 

103 다양한 범위 선택하기 예제.xlsm
0.01MB

 

반응형