我有一些使用5个不同常数(FC)的代码,我想使用它们的平均值,我可以在excel的单元格中得出结果。
如果还有其他明显的错误或可改进之处,将不胜感激。
Dim rainfall(), evaporation(), obs_q(), FC() As Double
Dim available_w(), overflow(), interflow() As Double
Dim ccrain, ccevaporation, i, j As Integer
'amount of data
Do
m = Worksheets("Hydrological_Data").Cells(6 + n, 2)
If m <> "" Then
n = n + 1
Else
Exit Do
End If
Loop
ReDim rainfall(n + 1), evaporation(n + 1), obs_q(n + 1) As Double
For i = 0 To n - 1
obs_q(i) = Worksheets("Hydrological_Data").Cells(6 + i, 3)
rainfall(i) = Worksheets("Hydrological_Data").Cells(6 + i, 4) * (1 + ccrain / 100)
evaporation(i) = Worksheets("Hydrological_Data").Cells(6 + i, 5) * (1 + ccevaporation / 100)
Next i
'initial conditions
ReDim available_w(n - 1, 5), overflow(n - 1, 5), interflow(n - 1, 5) As Double
available_w(0, 1) = FC(1) + rainfall(0) - evaporation(0)
available_w(0, 2) = FC(2) + rainfall(0) - evaporation(0)
available_w(0, 3) = FC(3) + rainfall(0) - evaporation(0)
available_w(0, 4) = FC(4) + rainfall(0) - evaporation(0)
available_w(0, 5) = FC(5) + rainfall(0) - evaporation(0)
For j = 1 To 5
If available_w(0, j) > FC(j) Then
overflow(0, j) = available_w(0, j) - FC(j)
available_w(0, j) = FC(j)
Else
overflow(0, j) = 0
End If
If available_w(0, j) > 0 Then
interflow(0, j) = available_w(0, j) * a
Else
interflow(0, j) = 0
End If
答案 0 :(得分:0)
首先,提供一些编码建议。两端带有AS的Dim语句仅将最后一个变量AS声明为指定的类型。参见https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/dim-statement
第二,使用n而不进行初始化。最好从初始化变量而不是使用编译器的初始化。在大多数情况下,这是可行的,但是如果由于某种原因重新输入或重新使用了代码,则会以错误的n开头。
最近在使用调试器创建代码和进行测试时遇到了这种情况。我在调试器中跳来跳去,有时循环没有运行,因为我没有初始化循环变量。
答案 1 :(得分:0)
更多编码建议...
请不要使用exit
(或使用goto)。这是一个坏习惯。另外,我建议您也参考您的工作簿,而不仅仅是工作表。
例如,您可以执行以下操作:
Dim n As Long
n = 0 'as already suggested in another post, n needs to be initialized with whatever value you see fit
Do While ThisWorkbook.Worksheets("Hydrological_Data").Cells(6 + n, 2) <> ""
n = n + 1
Loop
现在,就FC(1)... FC(5)的平均值而言,我可能不明白您的问题所在,因为与到目前为止已经编写的代码相比,它相当容易...
无论如何,这是显而易见的方法:
Dim FCsum As Double
Dim FCaverage As Double
Dim i As Integer
FCsum = 0
For i = 1 To 5 Step 1
FCsum = FCsum + FC(i)
Next i
FCaverage = FCsum / 5
现在,如果仅使用AVERAGE
公式就可以在一个单元格中计算出该平均值,那么它会更加容易。您将像这样使用对该单元格的引用:
ThisWorkbook.Worksheets("Hydrological_Data").Range("A1").value 'or whichever cell your average is being calculated in
,然后将其用于您要执行的任何计算中。