如何在一个循环中从一列转换到另一列?

我正在创build一个显示一天中的秒数(86400)的程序,这意味着将以该格式从00:00:01到59:59:59显示86400行数据。 但是,我得到一个运行时错误:溢出。 因此,我假设我需要使用多个列来收集这些数据 – 如果是的话,我该怎么做?

Private Sub mythirdlesson() Dim wks As Worksheet Dim s As Integer Dim m As Integer Dim h As Long Dim cellrow As Integer Set wks = ThisWorkbook.Worksheets("Library") cellrow = 1 For h = 0 To 59 For m = 0 To 59 For s = 0 To 59 wks.Cells(cellrow, 1) = h & ":" & m & ":" & s cellrow = cellrow + 1 Next Next Next End Sub 

问题不在于Excel行,而在于cellrow数据types。 我改变了很久,它没有问题。 另外请注意,您的脚本有一个devise错误,一天计算60个小时,而不是24个。请考虑更正后的脚本:

 Private Sub mythirdlesson() Dim wks As Worksheet Dim s As Integer Dim m As Integer Dim h As Long Dim cellrow As Long Set wks = ThisWorkbook.Worksheets("Library") cellrow = 1 For h = 0 To 23 For m = 0 To 59 For s = 0 To 59 wks.Cells(cellrow, 1) = h & ":" & m & ":" & s cellrow = cellrow + 1 Next Next Next End Sub 

问候,

使用数组总是更快。 下面的代码在0.4秒wks.Cells(cellrow, 1) = h & ":" & m & ":" & s我的PC上填充86400行,对于wks.Cells(cellrow, 1) = h & ":" & m & ":" & s 5.3秒wks.Cells(cellrow, 1) = h & ":" & m & ":" & s method:

 Sub TestFill86400() Dim filler(1 To 86400, 1 To 1) As Date Dim i As Long For i = 1 To 86400 filler(i, 1) = (i - 1) / 86400 Next With ThisWorkbook.Worksheets("Library") With .Range(.Cells(1, 1), .Cells(86400, 1)) .Value = filler .NumberFormat = "hh:mm:ss" End With End With End Sub 

您可以转换为.xlsx,.xlsm和.xlsb工作簿吗? 他们有每张纸1048576行的限制。

此外,您将不得不将CellRow的数据typesCellRowLONG

如果你仍然需要把它分成多个列,你可以使用模块化的操作…像这样:

 Private Sub mythirdlesson() Dim wks As Worksheet Dim s As Integer Dim m As Integer Dim h As Long Dim cellrow As Long Set wks = ThisWorkbook.Worksheets("Sheet1") cellrow = 0 For h = 0 To 24 For m = 0 To 59 For s = 0 To 59 wks.Cells(cellrow Mod 65536 + 1, cellrow \ 65536 + 1) = h & ":" & m & ":" & s cellrow = cellrow + 1 Next Next Next End Sub 

我意识到你正在做练习和学习VBA。 这是关于速度的一个很好的教训。 看看写出86400个时间值需要多长时间,就像你在这个练习中所做的那样。

这是我该怎么做的。 大约需要十分之一秒完成:

 Private Sub FastTimes() [d:d].NumberFormat = "hh:mm:ss" [d1:d86400] = [row(1:86400)/86400] End Sub