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

Excel 使用Do While循环而不是立即窗口将值打印到工作表,excel,algorithm,vba,do-while,Excel,Algorithm,Vba,Do While,我了解到“即时窗口”最多只能打印199行值。是否有一种简单的方法将以下算法生成的值打印到工作表单元格?具体来说,我不确定执行while循环是否是最有效的方法。我通常处理工作表中已经存在的数据,我只指定循环运行到最后一行数据。由于最外层的循环从t=2运行到50,在算法生成所有可能的值之前,我不太确定如何格式化最内层的循环以运行。如前所述,宏花费的时间太长,我没有等它停止。该算法最多只能生成一千行数据 For t = 2 To 50 For b = 2 To 20 For r

我了解到“即时窗口”最多只能打印199行值。是否有一种简单的方法将以下算法生成的值打印到工作表单元格?具体来说,我不确定执行while循环是否是最有效的方法。我通常处理工作表中已经存在的数据,我只指定循环运行到最后一行数据。由于最外层的循环从
t=2运行到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
t=2到50时的

对于b=2到20
对于r=1到20
对于k=3到7
如果t*k=b*k,那么
λ=r*(k-1)/(t-1)
如果lambda=Int(lambda),则
当t<51时,不要这样做
单元(i,1)=t
单元(i,2)=b
单元(i,3)=k
单元(i,4)=r
单元(i,5)=λ
调试。打印t,b,k,r,λ
i=i+1
环
如果结束
如果结束
下一个k
下一个r
下一个b
下一个t

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

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

正如Tim和我所说的,不需要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

我不明白。你到底想做什么?是否要将
t,b,k,r,lambda
放在一个单元格中?内部
Do While
循环中
t
的值似乎没有变化?这个循环是如何退出的?你已经在循环所有的东西了。不需要Do循环。删除它并放入
i=range(“A100000000”).end(xlup).offset(1).Row
@ScottCraner我很抱歉,但我不太确定您要说什么。像这样
i=Range(“A100000000”)。End(xlUp)。Offset(1)。行
,在下一行,
单元格(i,1)
,然后下一行
i=i+1
我得到一个全局对象失败。@ScottCraner成功了!谢谢更好的方法。
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