1

VBA で作成された配列を Excel スプレッドシートのセルに印刷しようとしています。パーコレーションとランオフの値が「添え字が範囲外」というエラーを出し続ける ホース配列を正しく作成していますか? 計算と印刷のサブ機能を 1 つに統合しました。

 NumMonth = 12
 Dim col As Long
 Dim rw As Long
 rw = 4
 col = 13

 Range(Cells(rw, col), Cells(rw + NumMonth - 1, col)).Value = _
    Application.Transpose(WC)

Range(Cells(rw, col + 1), Cells(rw + NumMonth - 1, col + 1)).Value = _
    Application.Transpose(Runoff)

   Range(Cells(rw, col + 2), Cells(rw + NumMonth - 1, col + 2)).Value = _
     Application.Transpose(Percolation)
   End Sub
4

2 に答える 2

2

ワークシート関数の代わりにそのapplication.transpose

  Range(Cells(rw, col), Cells(rw + NumMonth - 1, col)).Value = _
      application.Transpose(WC)

ここにテストサブがあります

Sub test()
Dim myarray As Variant

'this is a 1 row 5 column Array
myarray = Array(1, 2, 3, 4, 5)

'This will fail because the source and destination are different shapes
Range("A1:A5").Value = myarray


'If you want to enter that array into a 1 column 5 row range like A1:A5

Range("A1:A5").Value = Application.Transpose(myarray)
End Sub

別のサブで作成した配列を呼び出すと、エラーが発生します。この理由は、コードをステップ実行すると、ローカル ウィンドウで確認できます。配列を作成するサブを実行すると、ローカルに表示され、サブが終了すると消えます。つまり、メモリに保存されなくなります。別のサブルーチンから変数または配列を参照するには、それを渡す必要があります。

配列または変数の受け渡しは、さまざまな方法で行うことができます ここにいくつかのリンクがあります ここ とここ

于 2013-02-22T20:18:10.360 に答える
1

あなたPrecipRefETはいつも対等、このメンタリティはどうなの?

Precip(i) = Cells(4 + i, 2).Value
RefET(i)  = Cells(4 + i, 2).Value

また、配列RunoffPercolation配列を設定すると、ifステートメントが満たされない場合(以下)、それらは何にも設定されず、提供されたデータでそれを満たすことができました:

If (fc - WC(j - 1) + RefET(i) * dz < Precip(i) * dz) then

それらに常に値があることを確認するために何かを追加します。

If (fc - WC(j - 1) + RefET(i) * dz < Precip(i) * dz) Then
    Runoff(i) = (Precip(i) - (fc - WC(j - 1) + RefET(i)) * dz) * 0.5
    Percolation(i) = (Precip(i) - (fc - WC(i - 1) + RefET(i)) * dz) * 0.5
    WC(j) = fc
Else
    Runoff(i) = 0
    Percolation(i) = 0
    WC(j) = WC(j - 1) + Precip(i) - RefET(i) / dz
End If

ReDimこれを行うと、RunoffandPercolation変数を使用していないことがわかりました。WaterBalanceRead以下をサブ に追加する必要があります。

ReDim Runoff(1 To NumMonth + 1)
ReDim Percolation(1 To NumMonth + 1)
于 2013-02-23T00:01:37.687 に答える