2016-08-24 4 views
0

"Data"시트의 A 열의 해당 값이 다른 시트의 범위에 해당 할 때 "Data"시트의 i 번째 열의 조건부 최대 값을 계산하려고합니다. 결과". 아래 코드를 사용해 보았지만 잘못되었습니다 :VBA의 evaluate()에있는 교차 워크 시트 수식

Worksheets("Result").Cells(r , 4)=Evaluate("=STDEV(IF(Data!A:A>=Result!range(r,1) and Data!A:A<Result!range(r,2),Data!columns(i)))") 

수식을 작성하는 올바른 방법은 무엇입니까?

+0

문자열과 변수가 섞여있는 것처럼 보입니다. VBA 메서드는 마술처럼 문자열의 중간에서 실행되지는 않습니다. 별도로 실행하고 다시 연결해야합니다. Excel에서도 "and"와 같은 것이 없습니다. VBA에서 실행되도록하거나 'And (condition1, condition2)'함수처럼 사용하십시오. – Mikegrann

+0

고마워요. 나는 and() 함수를 올바르게 기억하지 못했다. 문자열과 변수를 올바르게 연결하는 방법을 알 수 없습니다. –

+0

열 (i)가 'i' 변수이거나 열 I를 원할 때 –

답변

3

문자열에서 vba 부품을 제거하고 &으로 연결해야합니다.

그리고 배열 수식이 잘 작동하지 않고 대신 *를 사용하여 두 개의 부울 값을 비교합니다.

Worksheets("Result").Cells(r,4)=Worksheets("Result").Evaluate("=STDEV(IF((Data!A:A>=Result!" & Cells(r,1).Address & ")*(Data!A:A<Result!" & Cells(r,2).Address & "),Data!" & columns(i).Address & "))") 

경고 : 당신은 배열 수식에서 전체 열 참조를 사용하고 있습니다. 루프가 너무 많으면 느려질 것입니다. 전체 열 참조를 데이터 집합의 범위로 변경하는 것이 좋습니다.

+0

완벽하게 작동합니다! 감사. 우리가 지적 하듯이, 너무 느립니다. "데이터 세트의 범위에 대한 모든 전체 열 참조 변경"이 무슨 뜻인지 궁금합니다. –

+0

@ThomasInzina 대답을 참조하십시오. 그는 한 가지 방법을 보여줍니다. 열 A의 데이터 범위와 변수 i가 참조하는 열을 찾아서 설정해야합니다. A2 : A100 등. 또는 최소한 범위를 A2 : A1000과 같은 모든 데이터를 캡처 할 수있을만큼 충분히 큰 범위로 설정하십시오. –

+0

오셨습니까? 감사. –

2

Scott Craner의 조언에 따라 Intersect를 사용하여 실제 데이터에 맞게 열 범위를 트리밍합니다.

=STDEV(IF((Data!$A$1:$A$19>=Result!$A$10)*Data!$A$1:$A$19<Result!$B$10),[email protected]$E$1:$E$19))

새로운 변수 선언 :

Dim DataA As String, DataI As String, sFormula As String 

코드를 ir 루프에 삽입 여기

r = 10: i = 5Worksheets("Data") 데이터의 19 개 행이 샘플 출력 :

With Worksheets("Data") 
    DataA = Intersect(.Columns("A"), .UsedRange).Address 
    DataI = Intersect(.Columns(i), .UsedRange).Address 
    sFormula = "=STDEV(IF((Data!" & DataA & ">=Result!$A$" & r & ")*(Data!" & DataA & "<Result!$B$" & r & "),[email protected]" & DataI & "))" 
End With 

With Worksheets("Result") 
    .Cells(r, 4) = .Evaluate(sFormula) 
End With 
+0

@ScottCraner DataA를 문자열로 만들고 범위의 주소를 지정했습니다. 그래서 연결을 짧게 할 수 있습니다 :'Intersect (.Columns ("A"), .UsedRange) .Address'. 나는 그것이 옳다고 생각한다. 필자가 제공 한 샘플 출력 문자열을 다시 확인할 수 있습니까? –

+0

죄송합니다. 전화가 왔습니다. –

+0

@ScottCraner 걱정할 필요가 없습니다. 조금 비열하다. –

관련 문제