gpt4 book ai didi

excel - 在vba中使用循环创建值并将它们存储在工作表的列中?

转载 作者:行者123 更新时间:2023-12-04 22:33:02 27 4
gpt4 key购买 nike

我正在尝试计算速度和加速度,变量是时间 t。我想在 vba 中编写这些,以使其更快,因为稍后我将需要速度和加速度来结合不同的逻辑条件进行其他几个计算。我希望将结果打印在工作表中,以便在计算过程中仔细检查结果是否真实。

它应该或多或少的例子

t        vel          a

0.002 39 -777
0.004 38.6 -802
0.006 35 -500
0.008 33.4 -400
0.01 32.1 -12297.1

所以我根据评论尝试了一些不同的东西:
从结果来看,我认为第一个代码示例运行良好,但我仍然可以看到介于两者之间的任何结果 > 所以主要问题:我是否有机会更改推荐以写入工作表而无需更改太多其他内容?

第二个代码示例是尝试将所有内容写入数组:我确实理解我认为的原理,但这里的主要错误似乎是我的变量 t 没有正确生成,因此没有计算公式:找不到这里的错误,我将不胜感激更多的帮助......
Kinematics Calculation

'Set t from 0 to 2 s with time step of 0.002s; Calculate Rot_vel until <= 0,
'Find index t_2 when Rot_vel <= 0
t = 0
Do

t = t + 0.002

Rot_vel = -10356# * t ^ 6 + 24130# * t ^ 5 - 19002# * t ^ 4 + 4933# * t ^ 3 +
362# * t ^ 2 - 213# * t + 39
Worksheets("test").Range(Cells(3, 2), Cells(1003, 2)) = Rot_vel

Loop Until Rot_vel <= 0


If Rot_vel <= 0 Then

t_2 = t

If t_2 > 0 Then
Debug.Print t_2
End If
End If

'Continue calculations for t 0 to t_2 with 0.002 steps
t = 0
Do

t = t + 0.002

A_rot = -62136# * t ^ 5 + 120650# * t ^ 4 - 76008# * t ^ 3 + 14797.8 * t
^ 2 + 723.26 * t - 212.7


Worksheets("test").Range(Cells(3, 3), Cells(1003, 3)).value = A_rot

L = MoI * Rot_vel / 1000
M = MoI * A_rot / 1000

Worksheets("test").Range(Cells(3, 8), Cells(1003, 8)).value = L
Worksheets("test").Range(Cells(3, 9), Cells(1003, 9)).value = M

G = L / t_2
Worksheets("test").Range(Cells(3, 10), Cells(1003, 10)).value = G


Loop Until t = t_2

第二个版本:
Kinematics Calculation

'Set t from 0 to 2 s with time step of 0.002s; Calculate Rot_vel until <= 0,
'Find index t_2 when Rot_vel <= 0

Dim arrCalc As Variant
Dim i As Integer
Dim j As Integer

ReDim arrCalc(i To 1003, j To 13)

For i = LBound(arrCalc, 2) To UBound(arrCalc, 2)

t = 0
Do
t = t + 0.002

arrCalc(i, 1) = t

arrCalc(i, 2) = -10356# * t ^ 6 + 24130# * t ^ 5 - 19002# * t ^ 4 + 4933#
* t ^ 3 + 362# * t ^ 2 - 213# * t + 39 'Rot_vel

Loop Until arrCalc(i, 2) < 0

Dim pos, val
val = 0
pos = Application.Match(val, arrCalc(i, 2), False)
pos = t_2


t = 0
Do
t = t + 0.002

arrCalc(i, 3) = -62136# * t ^ 5 + 120650# * t ^ 4 - 76008# * t ^ 3 +
14797.8 * t ^ 2 + 723.26 * t - 212.7

arrCalc(i, 8) = MoI * Rot_vel / 1000 'L


arrCalc(i, 9) = MoI * A_rot / 1000 'M


arrCalc(i, 10) = 1 / t_2 * L 'G


Loop Until t = t_2

Next i

With Worksheets("test")

.Cells(2, "A") = 0
.Cells(3, "A").Resize(UBound(arrCalc, 1), UBound(arrCalc, 2)) = Rot_vel
.Cells(2, "A").Resize(UBound(arrCalc, 1) + 1, 1) = t
'.Cells(3, "C").Resize(UBound(arrCalc, 1), UBound(arrCalc, 3)) = A_rot

End With

最佳答案

您的变量 a_rot 和 rot_val 在我看来不像数组,而是普通变量。因此,它们中只存储一个值,当然您只会得到一个值作为输出。

我看到两个选项:1)您将所有值写入一个数组,然后将该数组复制到工作表中。 2)您将每个计算逐行写入工作表。 1号)要快得多。

解决方案可能如下所示:

ReDim Array (Lines, Columns)    
For each line
Array (line, Columns1) = Formula1
Array (line, Columns2) = Formula2
Array (line, Columns3) = Formula3
Next

关于excel - 在vba中使用循环创建值并将它们存储在工作表的列中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51265055/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com