VBA:第二个循环覆盖第一个循环

对于Excel中的VBA,我认为这个问题比较简单。 我正在写我的第一个嵌套循环,我遇到了第二个增量覆盖第一个的问题。 代码如下:

Sub RandNumRang() Dim i As Integer, Row As Integer, Col As Integer Dim j As Integer Dim LastRow As Long Dim NoRows As Integer Dim MinNum As Double, MaxNum As Double Dim NumFormula As String Col = 1 'Write random numbers on Column A 'Get the range and number of random values needed For j = 3 To 4 NoRows = ActiveSheet.Range("G" & j).Value 'No of random values needed MinNum = ActiveSheet.Range("E" & j).Value 'Min Range MaxNum = ActiveSheet.Range("F" & j).Value 'Max Range NumFormula = "=RANDBETWEEN(" & MinNum & "," & MaxNum & ")" 'Generate between Range i = 0 For Row = 2 To NoRows + 1 i = i + 1 ActiveSheet.Cells(Row, Col).Value = i 'ID ActiveSheet.Cells(Row, Col + 1).Formula = NumFormula 'Random Value ActiveSheet.Cells(Row, Col + 2).FormulaR1C1 = "=TIME(0,0,RC[-1])" 'Convert to time Next Row Next j End Sub 

我试图产生一组随机的时间间隔。 代码完全是我想要做的,除了我的值被覆盖。 j循环最终会有2个以上的增量,但是这个代码将会有相同的覆盖问题。 我很确定它有一些与我指定

 For Row=2 To NoRows + 1 

作为嵌套循环的起点,但这又是我第一次在VBA脚本运行,我想我会伸出手,因为我已经尝试过的每个修复失败。 在此先感谢,并让我知道你是否需要任何进一步的细节。

另外,我附上了工作表的截图供参考:

在这里输入图像说明

这适用于你的例子:

 Sub RandNumRang() Dim Row As Integer, Col As Integer Dim j As Integer Dim LastRow As Long Dim NoRows As Integer Dim MinNum As Double, MaxNum As Double Dim NumFormula As String Col = 1 Row = 2 For j = 3 To 4 NoRows = Range("G" & j).Value MinNum = Range("E" & j).Value MaxNum = Range("F" & j).Value NumFormula = "=RANDBETWEEN(" & MinNum & "," & MaxNum & ")" For Row = Row To (Row + NoRows - 1) Cells(Row, Col).Value = Row - 1 Cells(Row, Col + 1).Formula = NumFormula 'Random Value Cells(Row, Col + 2).FormulaR1C1 = "=TIME(0,0,RC[-1])" 'Convert to time Next Row Next j End Sub 

就我所知,它正在按预期执行。 你设置:

  Col = 1 

这两个循环保持不变。 那么你有:

 For Row = 2 To NoRows + 1 

所以在你的第二个循环中,你总是要从第2行第1列开始,所以总是要覆盖。

您可能需要在第二次迭代中将Col设置为4(或5),或者保持跟踪您在行中的位置并追加到最后,