excel - 如何将此代码从使用 5 个常量更改为它们的平均值?
问题描述
我有一些代码使用了 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
解决方案
首先,一些编码建议。末尾带有 AS 的 Dim 语句仅将最后一个变量声明为声明的类型。请参阅https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/dim-statement
其次,使用 n 时没有初始化。初始化变量而不是使用编译器的初始化是很好的。这在大多数情况下都有效,但如果由于某种原因重新输入或重新使用代码,它将有错误的 n 开始。
我最近在使用调试器创建代码和测试时遇到了这个问题。我在调试器中跳来跳去,有时循环不会运行,因为我没有初始化循环变量。
推荐阅读
- laravel - 如何将刀片模板发送到发送电子邮件 API
- jquery - 如何从 node_modules 中包含 JQuery,除了 Laravel 5.8 应用程序中的 cdn?
- data-structures - 索引的数据结构
- mysql - Mysql 表中的多个最大值
- asp.net-mvc - 将请求参数名称映射到具有不同名称的操作参数
- javascript - 如何在反应中使用钩子传递 this.props.children
- python - 在 EagerTensor 中使用不同的数据类型
- redis - 在 StartUp.cs 中通过 ConnectionMultiplexer 和 AddStackExchangeRedisCache(IDistributedCache) 使用 Redis 缓存的主要区别是什么?
- c++ - 如何使用 C++ 中的指针从数组中删除最后一个元素?
- dialogflow-es - 列出会话的上下文并更新上下文参数的值