使用Do While循环而不是使用“立即”窗口将值打印到工作表

我了解到“即时窗口”最多只能打印199行数值。 有没有一种简单的方法来将下面的algorithm生成的值打印到工作表单元格中? 具体来说,我不确定do while loop是否是最有效的方法。 我通常处理已经存在于工作表上的数据,我只是指定循环运行,直到数据的最后一行。 由于最外层循环从t=2 to 50运行t=2 to 50 ,我不太确定如何格式化最内层循环才能运行,直到algorithm生成所有可能的值。 正如所写的那样,这个macros已经很长时间了,我没有等它停下来。 该algorithm最多不能产生超过一千行的数据。

 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 

正如蒂姆和我所说的那样,循环是不需要的,它会一直持续下去。 所以,而不是一个循环,你需要指定行,然后让它迭代。

 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 

忽略不存在的循环问题,这将会更快:

 Do While t < 51 Cells(i, 1).Resize(1, 5).Value = Array(t, b, k, r, lambda) i = i + 1 Loop 

如果你需要更快的速度,那么声明一个2-D数组arr(1 to [max # of rows], 1 to 5) ,在循环中填充它,并将其放在工作表上:

  Range("a1").Resize([max # of rows],5).Value = arr