您的代码应如下所示。
Sub Simulation()
Dim i As Long
Dim Temperature As Long
Dim WindSpeed As Long
Dim SolarRadiation As Long
Dim Humidity As Long
Dim SimulatedValue As Long
With Worksheets("DataLoggerValues")
For i = 1 To 100
Temperature = .Cells(i, 1).Value
WindSpeed = .Cells(i, 2).Value
SolarRadiation = .Cells(i, 3).Value
Humidity = .Cells(i, 4).Value
.Cells(i, 5).Value = (Temperature + SolarRadiation / WindSpeed) ^ 2 + Humidity / 37
Next i
End With
End Sub
你也可以使用这样的东西。只需将该函数用作普通的excel函数即可。然后,您可以使用自动填充来拖动它。您可以在将代码添加到模块后使用它。
Function Simulation(Temperature As Long, WindSpeed As Long, SolarRadiation As Long, Humidity As Long)
Simulation = (Temperature + SolarRadiation / WindSpeed) ^ 2 + Humidity / 37
End Function
编辑:
对下面评论的回答。
Sub Simulation()
Dim i As Long
Dim Temperature As Long
Dim WindSpeed As Long
Dim SolarRadiation As Long
Dim Humidity As Long
Dim SimulatedValue As Double
With Worksheets("DataLoggerValues")
For i = 1 To 100
Temperature = .Cells(i, 1).Value
WindSpeed = .Cells(i, 2).Value
SolarRadiation = .Cells(i, 3).Value
Humidity = .Cells(i, 4).Value
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
SimulatedValue = (Temperature + SolarRadiation / WindSpeed) ^ 2 + Humidity / 37
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
.Cells(i, 5).Value = SimulatedValue
Next i
End With
End Sub
我想你应该阅读一些关于什么是编程语言的对象。你可以从这个开始:
https://analysistabs.com/excel-vba/objects-properties-methods/
你的代码有什么问题:
Worksheets("DataLoggerValues") 是一个对象。它有一些特性。例如,它有一个名称:“DataLoggerValues”。
你可以检查一下
Sub Test()
MsgBox Worksheets(1).Name
End Sub
如果它的索引是一。它可能会有所不同。您可以使用该对象的另一个属性来检查它。
Sub Test()
MsgBox Worksheets("DataLoggerValues").Index
End Sub
现在我们要解决问题了。 Worksheets("DataLoggerValues").Cells(i, 5) 是另一个对象。它是一个子对象(子类对象)。
它不是一个单一的值!!!它是一个对象。它有不同的属性和方法。这就是为什么:.Cells(i,5) =... 没有意义。您是否将该值分配给 .Cells(i,5).Address 或 .Cells(i,5).Value 或者可能是一些不同的属性?所有这些都“存储”值。您可以阅读或更改它们。
也许我应该弄清楚为什么你必须以不同的方式使用SimulatedValue。
好吧,使用前四个单元格很简单。您创建一个变量,例如Dim Temperature As Long。它可以将稍后分配的值存储在计算机内存中的某个位置!!!只需将一些单元格的值分配给它Temperature = .Cells(i, 1).Value。
您对不同的变量执行相同的操作并执行一些计算。正如我在新代码中所做的那样,您可以将该数字(它必须是 Double,因为它必须“在逗号后存储一些数字”)存储在另一个变量中(如果您的温度、风速等不是整数,则更改 Long加倍)。
现在您可以将该值分配给单元格值.Cells(i, 5).Value = SimulatedValue。如果您要在计算之前的某处添加行 SimulatedValue = .Cells(i, 5).Value,您只需为变量 (SimulatedValue) 分配一个单元格的值(如果单元格为空或不存在,则为 0,我不是专家。如果您尝试打印该值,您什么也得不到,但是您可以将任何值乘以它的值,然后得到 0)。如果您随后编写 SimulatedValue = 5 之类的内容,则只需为变量分配新值。您不对那个单元格对象(单元格,单元格的值)做任何事情。
我希望它很清楚。我尽量简洁
我只是 vba 的初学者,我对编程了解不多,所以我可能用错了一些术语,请记住这一点。也许有人会纠正我。 :)
关于使用浮点变量(例如 Double)的重要内容。阅读:
Whats wrong with this simple 'double' calculation?
Compare double in VBA precision problem
我猜如果您将该值直接分配给某个单元格的值,问题仍然存在,尽管我还没有阅读或尝试过。
.Cells(i, 5).Value = (Temperature + SolarRadiation / WindSpeed) ^ 2 + Humidity / 37
如果您使用浮点数进行一些计算,将来可能会为您节省一些时间。