Private Sub CommandButton1_Click() Dim i As Double, j As Double, k As Double, l As Integer, m As Double, n As Double Dim lastRow As Long Dim o As Double, p As Double, q As Double, r As Integer, s As Double, t As Double

'第一组数据
i = 0.031
k = 2331.66 / 31.6
j = i * k
l = 0
m = 0.005 + WorksheetFunction.RandBetween(1, 9) / 10000 + WorksheetFunction.RandBetween(1, 9) / 100000 + WorksheetFunction.RandBetween(1, 9) / 100000
n = m

lastRow = Range('A' & Rows.Count).End(xlUp).Row

While i <= 31.6 And j <= 2331.66
    l = l + 1
    Range('A' & lastRow + l).Value = l
    Range('B' & lastRow + l).Value = 1008
    Range('C' & lastRow + l).Value = i
    Range('D' & lastRow + l).Value = j
    Range('E' & lastRow + l).Value = n
    i = i + 0.031 + WorksheetFunction.RandBetween(1, 4) / 1000
    j = i * k
    n = m + n
Wend

Range('A' & lastRow + l).Value = l
Range('B' & lastRow + l).Value = 1008
Range('C' & lastRow + l).Value = 31.57
Range('D' & lastRow + l).Value = 2331.66
Range('E' & lastRow + l).Value = n + m

MsgBox '第一组模拟数据完成'

'第二组数据
o = 0.031
q = 2891.85 / 31.6
p = o * q
r = l + 1
s = 0.005 + WorksheetFunction.RandBetween(1, 9) / 10000 + WorksheetFunction.RandBetween(1, 9) / 100000 + WorksheetFunction.RandBetween(1, 9) / 100000
t = s

While o <= 31.6 And p <= 2331.66
    Range('A' & lastRow + r).Value = r
    Range('B' & lastRow + r).Value = 1009
    Range('C' & lastRow + r).Value = o
    Range('D' & lastRow + r).Value = p
    Range('E' & lastRow + r).Value = t
    o = o + 0.031 + WorksheetFunction.RandBetween(1, 4) / 1000
    p = o * q
    t = s + t
    r = r + 1
Wend

Range('A' & lastRow + r - 1).Value = r - 1
Range('B' & lastRow + r - 1).Value = 1009
Range('C' & lastRow + r - 1).Value = 31.57
Range('D' & lastRow + r - 1).Value = 2891.85
Range('E' & lastRow + r - 1).Value = s + t

MsgBox '第二组模拟数据完成'

End Sub

说明:

  1. 将变量的声明放在最前面,将第二组数据的声明放在第一组数据的下面,避免了多次声明变量。
  2. 在第二组数据的循环中,将r的初始化放在了p的计算前面,否则第一次循环r会重复计算一次。
  3. 将最后一行数据的行数计算放在循环外面,避免了多次计算。

原文地址: https://www.cveoy.top/t/topic/ohkT 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录