2014-11-23 3 views
0

범위 이름의 For 루프에서 인덱스 번호를 사용하고 싶습니다. 아래를 봐주세요. "필요한 개체"오류가 나타납니다. 도와 줘서 고마워. Excel VBA : 범위 이름의 For 루프에서 인덱스 번호 사용

감사

,

단테

Dim i As Integer 
For i = 2 To 25 
    If Not Intersect(range_1, range_ & i) Is Nothing Then 
     MsgBox ("Error! range_1 and range_" & i & " overlap!") 
    End If 
Next i 
+0

범위는 어디입니까 ** ** 흐림 ?? ** –

+0

무엇이'range_1' 또는'range_i'입니까? 명명 된 범위? 아마도'range'는 객체라는 것을 알 것입니다. 그래서 정의하지 않고서는, 당신은'intersect'를 사용하려하고 있습니다, 그래서 오류가옵니다. – ZAT

+0

예, 모든 범위의 이름은 다른 곳에서 올바르게 지정됩니다. –

답변

1

내가 이름 범위의 경우, 이후 이전의 대답을 떠나, 그것은 맞습니다도있다 다른 사람이 개선하여 명명 된 범위의 문제를 찾는 사용자는 유용하다고 생각할 수 있습니다.

한편

, 당신이 아마 의미하는 것은

Set range_1 = Range("A1") 
Set range_2 = Range("A2") 
'... 
Set range_25 = Range("A25) 
(당신이 당신의 임무를 만들 었는지, 내가 알 수 없다 물론 이것은 단지 예입니다)로, 변수
의 범위를 할당한다는 것입니다

불행히도 변수 이름을 통해 루프를 반복 할 수 없습니다.

Dim ranges As Collection: Set ranges = New Collection 

ranges.Add range_1 
ranges.Add range_2 
'... 
ranges.Add range_25 

일반적으로 더 컬렉션마다의 범위를 추가 :하지만 당신이 할 수있는 것은 당신이 그들을 통해 반복하는 인덱스를 사용하여 최근에 액세스 할 수 있도록 범위의 컬렉션을 만들 것입니다 당신은 그것을 정의합니다. 나중에이 범위가 변경 되더라도 Add 메서드가 개체의 얕은 복사을 생성하므로 목록의 범위도 변경됩니다 (다시 말해서 여전히 원래 개체를 가리키고 있음) .

이제 범위의 컬렉션이 범위 개체를 저장하고 있으며 인덱스로 액세스 할 수 있습니다. 예를 들어, 특정한 경우에 : 좋은 방법으로

For j = 2 To 25 
    If Not Intersect(ranges(1), ranges(j)) Is Nothing Then 

때마다 당신이 개체의 "인간적으로 색인"시리즈를 반복하기를 원할 것입니다 기억/변수는 귀하의 경우, 당신은 수시로 할 수 있습니다 것입니다 변수의 이름을 코드 자체에서 작성/변경할 수 없기 때문에이를 콜렉션으로 변환 할 수 있습니다.

+1

컬렉션 아이디어가 그랬습니다. 양해 해 주셔서 대단히 감사합니다. –

2

당신은 변수 이름에 숫자를 추가 할 수 없습니다. 인터 섹트 기능은 범위 오브젝트를 취해, 그래서 당신은 작성 할 수 있습니다 : 물론

Dim i As Integer 
For i = 2 To 25 
    If Not Intersect(Range("range_1"), Range("range_" & i)) Is Nothing Then 
     MsgBox ("Error! range_1 and range_" & i & " overlap!") 
    End If 
Next i 

, 난 당신이 올바르게 등 "range_1", "range_2"

편집하여 명명 된 범위를했다고 믿고있어 (Doug) : 올바른 시트를 체크인하는 버전입니다. 이 경우 ActiveSheet로 설정되지만 조정할 수 있습니다. 명명 된 범위에 대해이 검사가 실제로 워크 시트에 정의되어 있습니다, 코드에서 변수로 설정되지 않은 범위 :

Sub CheckIntersect() 
Dim ws As Worksheet 
Dim i As Long 

Set ws = ActiveSheet 'adjust if necessary 
For i = 2 To 25 
    If Not Intersect(ws.Range("range_1"), ws.Range("range_" & i)) Is Nothing Then 
     MsgBox ("Error! range_1 and range_" & i & " overlap!") 
    End If 
Next i 
End Sub 
+1

나는 종종'인터 섹트 (Intersect)'에 닫는 괄호를 남겨 두었으므로 너는 너무 위의 행동을 한 것으로 나타났다. 추가 될 때까지 컴파일되지 않습니다. –

+1

고마워요 @DougGlancy, 고쳐주세요! –

+0

Matteo NNZ, 도와 주셔서 감사합니다. 이제 개체 '_Global'의 '메서드'가 실패합니다. –