2013-04-06 22 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個以上的值(或者在你的數組(tmpdiff,tmpval)位添加n個空值)。你提到隨後的值是空的,你在哪裏填充它們? – NickSlash 2013-04-06 22:50:06

+0

對不起,我的無知,你最終的目標是什麼?是否有'tmpdiff'的最小值? – glh 2013-04-07 04:31:07

+0

嗨,尼克,當agecell循環運行並符合If條件時,我得到tmpdiff和tmpval的值。每次我得到一個tmpdiff和tmpval時,我都無法獲得tmparray來存儲以前的比較結果 - 我認爲redim保留會有所幫助,但一次不會超過2個元素。 – Neelie 2013-04-07 08:01:23

回答

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