1

私のループは時期尚早に終了しているようです。基本的には以下の条件を希望します。

WC(j-1)+WCinit*dz が pwp よりも大きい場合、fc-WC(j-1)+WCinit+RefEF*dz が Precip *dz よりも小さい場合

その場合、流出とパーコレーションは precip-fc- (WC+WCinit)+RefET*dz*0.5 に等しく、WJ(j)=fc

そうでない場合、流出およびパーコレーション=0 および WC(j)=WC(j-1)+WCinit+precip-RefET*dz

ただし、WC(j - 1) + WCinit(i) <= pwp の場合、prin WC(j)=pwp

i と j =12 のときにループ全体を終了させたい

j=2 でループが終了しているように見える

Dim fc As Double
fc = Cells(4, 7).Value
NumMonth = 12
i = 1
j = 2
Dim pwp As Double
pwp = Cells(4, 8).Value
Dim dz As Double
dz = 0.5    'm

While (WC(j - 1) + WCinit(i) * dz > pwp * dz) And (j <= NumMonth)
    If (fc - (WC(j - 1) + WCinit(i)) + RefET(i) * dz) < (Precip(i) * dz) Then
        Runoff(i) = (Precip(i) - fc - (WC(j - 1) + WCinit(i)) + RefET(i) * dz) * 0.5
        Percolation(i) = (Precip(i) - fc - (WC(j - 1) + WCinit(i)) + RefET(i) * dz) * 0.5
        WC(j) = fc

    Else
        Runoff(i) = 0
        Percolation(i) = 0
        WC(j) = WC(j - 1) + WCinit(i) + Precip(i) - RefET(i) * dz

    End If
    j = j + 1
    i = i + 1

Wend
If WC(j - 1) + WCinit(i) <= pwp Then
    Runoff(i) = 0
    Percolation(i) = 0
    WC(j) = pwp
End If
4

1 に答える 1

2

コメントで説明したようにWhile、条件の最初の部分が真になることはないため、コードがループに入ることWC(j - 1) + WCinit(i) * dzはありません。2 番目の部分 はj <= NumMonth、明らかに正しいです。

これを機能させ、While条件が真になるまで j をインクリメントできるようにするには、別のタイプのループ、おそらく Do Until が必要です。このMSDN リファレンスを参照してください。

于 2013-02-23T17:20:10.560 に答える