0

したがって、フローのさまざまな物理的属性 (マッハ数、温度など) を含むこの数の異なる 2 次元配列があります。これらの値を Excel でプロットし、さまざまな平均を計算する必要があります。これらの配列はグローバルに宣言されています。これを行うには、配列ごとに 1 つのサブルーチンを記述していましたが、これは良い方法ではありません。可能な限り一般的なものに保つ必要があるからです。

つまり、サブルーチンには配列と対応するワークシートが渡されます...

またはポインタを使用しますか?vbaは私の選択した武器ではありませんが、この場合は必要なので、他のより高度なプログラミング言語(C ++など)でこれをどのように解決するかを知ることも興味深いでしょう。

「型の不一致: 配列またはユーザー定義型が必要です!」というエラーが表示されます。

私が電話するとき、私は使用します:

Call WriteFlowVariable(ws_meridian_velocity, MeridSpeed(), average_MeridSpeed(), area_average_MeridSpeed(), mass_average_MeridSpeed())

これはサブルーチンです:

Sub WriteFlowVariable(ws As Worksheet, FlowVariable() As Double, average_FlowVariable() As Double, area_average_FlowVariable(), mass_average_FlowVariable())

Dim i As Integer
Dim j As Integer

Dim sum_v As Double
Dim FlowVariabledeltaA(1000, 300) As Double
Dim FlowVariabledeltaA_added(1000) As Double

Dim FlowVariabledeltaM(1000, 300) As Double
Dim FlowVariabledeltaM_added(1000) As Double

'write titles of the charts
ws.Cells.Clear

For j = 0 To SecNumber - 1
    ws.Cells(1, j + 2).value = (j + 1)
Next j
ws.Cells(1, SecNumber + 2) = "Arithmetic Average"
ws.Cells(1, SecNumber + 3) = "Area Average"

For i = 0 To number_of_axial_positions - 1

    sum_v = 0

    'Write section number
    ws.Cells(i + 2, 1).value = i + 1

    'Write value and calculate arithmetic, mass and area average
    For j = 0 To SecNumber - 1
        ws.Cells(i + 2, j + 2).value = FlowVariable(i, j)
        sum_v = sum_v + FlowVariable(i, j)

        If j < SecNumber - 1 Then

            FlowVariable(i, j) = FlowVariable(i, j) * deltaA(i, j)

            FlowVariabledeltaA_added(i) = FlowVariabledeltaA_added(i) + FlowVariabledeltaA(i, j)

            FlowVariabledeltaM(i, j) = FlowVariable(i, j) * deltaM(i, j)

            FlowVariabledeltaM_added(i) = FlowVariabledeltaM_added(i) + FlowVariabledeltaM(i, j)

        End If

    Next j

    average_FlowVariable(i) = sum_v / SecNumber
    'Write arithmetic average to the third last column
    ws.Cells(i + 2, SecNumber + 2) = average_FlowVariable(i)

    area_average_FlowVariable(i) = FlowVariabledeltaA_added(i) / crosssectionareaInput(i)
    'Write area average to the second last column
    ws.Cells(i + 2, SecNumber + 3) = area_average_FlowVariable(i)

    mass_average_FlowVariable(i) = FlowVariabledeltaM_added(i) / crosssectionareaInput(i)
    'Write mass average to the last column
    ws.Cells(i + 2, SecNumber + 4) = mass_average_FlowVariable(i)
Next i

End Sub
4

1 に答える 1

0

私はあなたのサブをあまり詳しく調べていませんでしたが、

FlowVariable(,) As Double
average_FlowVariable(,) As Double
area_average_FlowVariable(,)
mass_average_FlowVariable(,)

すべてがグローバル変数と見なされるように正しく宣言されている場合、呼び出しは次のようになります。

Call WriteFlowVariable(ws_meridian_velocity, MeridSpeed, average_MeridSpeed, area_average_MeridSpeed, mass_average_MeridSpeed)

... つまり、 を削除し()ます。

また、これらは 2 次元配列であるため、Sub は次のようになります。

Sub WriteFlowVariable(ws As Worksheet, FlowVariable(,) As Double, average_FlowVariable(,) As Double, area_average_FlowVariable(,), mass_average_FlowVariable(,))Dim i As Integer

これで問題が解決することを願っています。

于 2013-06-17T15:22:23.350 に答える