插入行数作为variables插入行?

我希望插入行的数量插入基于一个variables。 我正在从底部向后工作,以避免弄乱行号。 代码如下。

Option Explicit Sub InsertRow() Dim ws As Worksheet Dim ColA As Range Dim RowNo As Integer Dim i As Integer Set ws = Worksheets("Sheet1") Set ColA = ws.Range("A2:A944") For i = 2 To ColA Step -1 RowNo = Range("B" & ":" & ColA.Row).Value Rows(RowNo, 0).EntireRow.Insert Next i End Sub 

问题是与行:

 RowNo = Range("B" & ":" & ColA.Row).Value 

我不确定在范围标注中如何包含variables的正确语法。

这个代码有几个问题。

  1. ColA是一个范围,而不是一个整数。 虽然本身不​​是问题,但是这意味着For i = 2 To ColA不起作用。 快速解决scheme将使用For i = 2 To ColA.Rows.Count ; 但,
  2. For i = ColA.Rows.Count To 2 Step -1有意义的,所以这意味着你需要执行从较高数字到较低数字的For循环( For i = ColA.Rows.Count To 2 Step -1
  3. 在for循环中, ColA.Row将始终返回范围的第一行,在这种情况下为2。 用于指定范围的连接parsing为“B:2”,这不是有效的地址。
  4. 目前还不清楚为什么代码RowNo = Range("B" & ":" & ColA.Row).Value似乎试图从一个范围(“B2”?)读取一个值。 这应该是指定要插入多less行的单元格? 这是基于你的陈述:

与基于variables插入的行数

通过将RowNovariables设置为单元格值,然后将该值与Rows(RowNo, 0).EntireRow.Insert ,input值实际上用于确定新行将被插入的行。 这是这个意图吗? 在这种情况下,代码会为循环的每次迭代(942次)在第2行中插入一行。 所以我会假定“B2”的值应该是要插入的行数。

  1. Rows(RowNo, 0).EntireRow.Insert不需要列索引。

试试这个代码:

Sub InsertRow()

 Dim ws As Worksheet Dim ColA As Range Dim RowNo As Integer Dim i As Integer Set ws = Worksheets("Sheet1") Set ColA = ws.Range("A2:A944") RowNo = ColA.Row ' Use cell B2 to set the number of rows to insert Dim intAddRows As Integer intAddRows = ws.Range("B2").Value For i = 1 To intAddRows ws.Rows(RowNo).EntireRow.Insert Next i End Sub 

但是,请注意,在范围ColA的起始处插入行(在这种情况下是行2)会将input范围Range("B2")向下移动指定的行数。 您将需要修改代码以从更合适的位置获取行数,例如: intAddRows = InputBox("Number of rows to insert", "Set rows")

更新 – 要添加列B中指定的行数:

 Sub insertRows() Dim ws As Worksheet Dim RowNo As Integer Dim lastLine As Integer Dim i As Integer Set ws = Worksheets("Sheet1") lastLine = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row For RowNo = lastLine To 2 Step -1 For i = 1 To ws.Cells(RowNo, 2) ws.Rows(RowNo + 1).EntireRow.Insert Next i Next RowNo End Sub