2013-08-29 1 views
1

다른 시트의 변수를 변수에 저장 한 다음 셀과 비교하려고합니다.범위를 변수로 설정하는 방법은 무엇입니까?

Function collectUtfall(A1 As String, Ax As String) 
Dim rng As Variant 
Dim sum as Integer 

sum = 0 

Set rng = Sheets("Utfall").Range("N2").Value <------- This line 

If rng = Ax Then 
     sum = sum + 10 
     Else: sum = 33 

End If 

collectUtfall = sum 
End Function 

문제는 그것이 내가 기대하는 방법을 행동 아니에요이다 : 이 코드가 있습니다. 나는 #Value 에러를 얻었고 코드에 표시된 라인까지 그것을 좁혔습니다. 그 줄을 제거하면 오류가 발생하지 않지만 물론 결과는 0뿐입니다.

범위를 작게하려고해도 작동하지 않습니다.

무엇이 문제 일 수 있습니까?

수정 : 원래 문제는 해결되었지만 다른 문제가 발생했습니다. 이 코드를 사용하면 (작은 변경) 동일한 오류가 다시 발생합니다. 오프셋을 잘못 사용하고 있습니까? 아니면 지금 문제가 있습니까?

Function collectUtfall(A1 As String, Ax As String) 
Dim rng As Variant 
Dim sum As Integer 

sum = 0 

rng = Sheets("Utfall").Range("M2:O272").Value 

If rng.Offset(0, 1) = Ax Then 
    sum = sum + 10 
    Else: sum = 33 

End If 


collectUtfall = sum 
End Function 
+0

당신은 존중해야 대답을. 'Offset'은'Range' 메소드입니다. '.Value'를 제거하면 모든 것이 잘 돌아갑니다. –

+0

죄송합니다. 나는 새로운 질문을 시작해야할지 안할지 확신하지 못했습니다. 다음에 할 것입니다! – andysando

답변

3

코드에 몇 가지 문제가 있습니다.

Set을 언제 사용하는지 배우기를 권합니다.

Difference between Dim and Set    

- 은 변수와 이유를 what datatypes to chose 체크 아웃, 또한

Doug Glancy에 의해 제공. 제한 사항과 사용 예를 참조하십시오. . .Value를 언제 사용해야하며 언제 사용하지 않습니까? 변수를 단일 셀로 지정하고 여러 셀로 지정할 때.

범위 컬렉션에 대해 how to loop을 알아보십시오.

코드 들여 쓰기에 대해 조금 읽으십시오.

그 후에 당신은 당신의 자신의 쓸 수 있습니다 : 그것은 같은 올바른 표시하고 새 질문을하고, 이전의 질문에

Function collectUtfall(A1 As String, Ax As String) 

    Dim rng As Range 
    Dim sum As Long: sum = 0 

    Set rng = Sheets("Utfall").Range("M2:O272") 

    Dim cell As Range 
    For Each cell In rng 
     If StrComp(cell.Offset(0, 1).Text, Ax, vbTextCompare) = 0 Then 
      sum = sum + 10 
     Else 
      sum = 33 
     End If 
    Next 

    collectUtfall = sum 
End Function 
+1

고맙습니다. – andysando

3

Set rng =에 "Set"가 불필요합니다. 그것을 제거하십시오.

rng = Sheets("sheet1").Range("N2").Value

+0

와우, 그건 간단했다. 감사! 나중에 참조 할 때 세트가 필요할 때가 있습니까? – andysando

+3

* 개체 *에 대한 참조를 지정할 때 * Set *을 사용합니다. 예 :'Dim c as Range : Set c = Range ("A1")'. 코드에서 rng를 * value *에 지정합니다. – Joe

+3

웹에서 더 많은 정보를 찾을 수 있습니다. 여기에 시작 : http://stackoverflow.com/questions/3872339/what-is-the-difference-between-dim-and-set-in-vba. –

0

당신은 충돌하는 데이터 유형을 가질 수있다. Ax가 유형 문자열 인 경우 문자열을 문자열과 비교해야합니다. 문자열을 문자열로 정의하거나 문자열을 정의 할 수 있습니다.

If CStr(Rng) = Ax Then 
관련 문제