2013-04-06 4 views
0

배열의 루프 결과를 수집하고 싶습니다. 이상적으로는, 첫 번째 루프의 결과를 유지하고 두 번째 루프의 결과와 비교합니다. 두 번째 루프의 결과가 더 좋다면 두 번째 루프를 유지하고 세 번째 루프와 비교해 보겠습니다. 이것이 어떻게 수행 될 수 있는지에 대한 아이디어가 있습니까?VBA 배열 : 조건에 따라 요소 추가

For Each ccell In pcrange 
If ccell.Cells.Value = 0 Then 
    For Each agecell In agerange 
    If agecell.Cells.Value < 0.5 And agecell.Offset(0, 5).Value > 1 Then 
    tmpyr = agecell.Offset(0, 1) 
    srchyr = ccell.Offset(0, -6) 
    tmpval = agecell.Offset(0, 2) 
    tmpdiff = Abs(tmpyr - srchyr) 
    arrindx = arrindx + 1 

    End If 

    tmparray = Array(tmpdiff, tmpval) 'need redim to hold more than 2 values? why are subsequent elements empty? 
    ReDim Preserve tmparray(2 * arrindx - 1) 
    'minarr = IIf(tmparray(2) > tmparray(0), tmparray(1), tmparray(3)); want to extract corresponding tmpval from array onto sheet if tmpdiff is the min of the entire loop; change to store better result each time 
    Next 
End If 
Next 
+0

예, 2 개 이상의 값을 보관하기 위해 다시 희미하게해야합니다 (또는 Array (tmpdiff, tmpval) 비트 내에 n 개의 빈 값을 추가하십시오). 후속 값이 비어 있음을 언급하고, 어디에 채우고 있습니까? – NickSlash

+0

내 무지 때문에 죄송합니다. 최종 목표는 무엇입니까? 그것은'tmpdiff '의 분을 가졌습니까? – glh

+0

안녕하세요 닉, 나는 agecell 루프가 실행되고 If 조건을 충족하면 tmpdiff 및 tmpval에 대한 값을 얻습니다. tmpdiff 및 tmpval을 얻을 때마다 tmparray에 이전 결과를 저장할 수 없기 때문에 redim preserve가 도움이 될 것이라고 생각했지만 한 번에 두 개 이상의 요소를 보유하지는 않습니다. – Neelie

답변

0

당신의 tmparray 그렇게 같이해야 정의 :

tmparray(UBound(tmparray, 1)) = Array(tmpdiff, tmpval) 'add values to last place 
ReDim Preserve tmparray(UBound(tmparry, 1) + 1) 'add another place to the array 

그리고 새로운 분을 찾기가 ReDim 다음에 위치 할 필요가있는 경우 :

If UBound(tmparray, 1) <= 2 then 
    minarr = tmpval 
ElseIf tmparray(UBound(tmparray, 1) - 1, 0) < tmparray(UBound(tmparray, 1) - 2, 0) then 
    minarr = tmparray(UBound(tmparray, 1) - 1, 1) 
end if 
여기에 지금까지 무엇을 발췌입니다