我已经了解了"立即窗口"最多只能打印199行值。有没有一种简单的方法可以将下面算法生成的值打印到工作表单元格中?具体来说,我不确定do while loop
是否是最有效的方法。我通常处理工作表中已存在的数据,我只是指定循环运行,直到最后一行包含数据。由于最外面的循环从t=2 to 50
运行,我不太确定如何格式化最内层循环,直到算法生成所有可能的值。正如所写,宏观花了很长时间,我没有等到它停止。该算法最多不应生成超过一千行数据。
For t = 2 To 50
For b = 2 To 20
For r = 1 To 20
For k = 3 To 7
If t * k = b * k Then
lambda = r * (k - 1) / (t - 1)
If lambda = Int(lambda) Then
Do While t < 51
Cells(i, 1) = t
Cells(i, 2) = b
Cells(i, 3) = k
Cells(i, 4) = r
Cells(i, 5) = lambda
Debug.Print t, b, k, r, lambda
i = i + 1
Loop
End If
End If
Next k
Next r
Next b
Next t
答案 0 :(得分:1)
忽略非退出循环问题,这会更快:
Do While t < 51
Cells(i, 1).Resize(1, 5).Value = Array(t, b, k, r, lambda)
i = i + 1
Loop
如果你需要更多的加速,那么声明一个二维数组arr(1 to [max # of rows], 1 to 5)
,在循环中填充它,并将其放在工作表上:
Range("a1").Resize([max # of rows],5).Value = arr
答案 1 :(得分:1)
正如蒂姆和我所说的那样,不需要do循环,它会永远持续下去。因此,您需要指定行,然后让它迭代,而不是循环。
For t = 2 To 50
For b = 2 To 20
For r = 1 To 20
For k = 3 To 7
If t * k = b * k Then
lambda = r * (k - 1) / (t - 1)
If lambda = Int(lambda) Then
I = Range("A" & Rows.count).End(xlUp).Offset(1).Row
Cells(I, 1) = t
Cells(I, 2) = b
Cells(I, 3) = k
Cells(I, 4) = r
Cells(I, 5) = lambda
'Debug.Print t, b, k, r, lambda
'I = I + 1
End If
End If
Next k
Next r
Next b
Next t