Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 宏以每隔一行添加行_Excel_Vba - Fatal编程技术网

Excel 宏以每隔一行添加行

Excel 宏以每隔一行添加行,excel,vba,Excel,Vba,我在Excel电子表格上运行了以下宏: Sub yTest01() For i = 10 To 72 Step 2 Cells(i, 1).EntireRow.Insert Next i End Sub 它每隔一行添加一个新行。但是,我想每个添加五行。我尝试了以下方法,但不起作用 Sub yTest01() For i = 10 To 72 Step 2 Cells(i, 1).EntireRow.Insert Cells

我在Excel电子表格上运行了以下宏:

Sub yTest01()
    For i = 10 To 72 Step 2
        Cells(i, 1).EntireRow.Insert
    Next i
End Sub
它每隔一行添加一个新行。但是,我想每个添加五行。我尝试了以下方法,但不起作用

Sub yTest01()
    For i = 10 To 72 Step 2
        Cells(i, 1).EntireRow.Insert
        Cells(i, 1).EntireRow.Insert
        Cells(i, 1).EntireRow.Insert
        Cells(i, 1).EntireRow.Insert
        Cells(i, 1).EntireRow.Insert
    Next i
End Sub

你知道我能做什么吗?

我猜你想要一行现有数据,然后是5行空白数据。试试下面的方法

Sub yTest01()
For i = 72 To 10 Step -1
    Cells(i, 1).EntireRow.Insert
    Cells(i, 1).EntireRow.Insert
    Cells(i, 1).EntireRow.Insert
    Cells(i, 1).EntireRow.Insert
    Cells(i, 1).EntireRow.Insert
Next i
End Sub
如果您想要的是两行数据,那么五行空行,然后将步骤更改为-2


添加或减去行时,最好是向后循环。

我猜您需要一行现有数据,然后是5行空白数据。试试下面的方法

Sub yTest01()
For i = 72 To 10 Step -1
    Cells(i, 1).EntireRow.Insert
    Cells(i, 1).EntireRow.Insert
    Cells(i, 1).EntireRow.Insert
    Cells(i, 1).EntireRow.Insert
    Cells(i, 1).EntireRow.Insert
Next i
End Sub
如果您想要的是两行数据,那么五行空行,然后将步骤更改为-2


添加或减去行时,最好向后循环。

为什么不起作用,为什么使用步骤2? 移动行后,您可以移动i 5个位置吗

Sub yTest01()
Dim i As Integer
    For i = 10 To 72 Step 1
        Cells(i, 1).EntireRow.Insert
        Cells(i, 1).EntireRow.Insert
        Cells(i, 1).EntireRow.Insert
        Cells(i, 1).EntireRow.Insert
        Cells(i, 1).EntireRow.Insert
        i = i + 5
    Next i
End Sub

为什么它不起作用,为什么使用步骤2? 移动行后,您可以移动i 5个位置吗

Sub yTest01()
Dim i As Integer
    For i = 10 To 72 Step 1
        Cells(i, 1).EntireRow.Insert
        Cells(i, 1).EntireRow.Insert
        Cells(i, 1).EntireRow.Insert
        Cells(i, 1).EntireRow.Insert
        Cells(i, 1).EntireRow.Insert
        i = i + 5
    Next i
End Sub

作为最佳实践,我努力减少VBA必须跨越边界与Excel进行通信的次数

因此,与其为每次插入跨边界调用五个,不如调用一个。后退可能会有帮助,但不是必要的

For i = 0 To 62 * 6 Step 6
    [10:10].Resize(5).Offset(i).Insert
Next

注意:迭代值0和62只是OP的行号,调整为从零开始。

作为最佳实践,我努力减少VBA必须跨越边界与Excel通信的次数

因此,与其为每次插入跨边界调用五个,不如调用一个。后退可能会有帮助,但不是必要的

For i = 0 To 62 * 6 Step 6
    [10:10].Resize(5).Offset(i).Insert
Next

注意:0和62的迭代值只是OP的行号,调整为从零开始。

回应@Scott Craner所说的:“当添加或减去行时,最好向后循环。”这是因为当您有10个(例如)项并添加1时,您现在有11个项。因此,第2项变成第3项,第3项变成第4项,等等。当交错两列数据时(在你的例子中,“第2”列是空行),想象一个拉链并从底部开始。为了回应@Scott Craner所说的:“当添加或减去行时,最好向后循环。”这是因为当你有10个(例如)项并添加1时,您现在有11项。因此,第2项变成第3项,第3项变成第4项,等等。当交错两列数据时(在您的情况下,“第2”列是空行),考虑一个拉链并从底部开始。这不起作用。想一想,是的,你会添加五行,然后移动到下一行,但当你添加五行时,你的数据就超过了72行,当你到达代码中的72行时,for循环停止,超过80%的数据将在72行以下,并且不会被分割。这是行不通的。想一想,是的,你会添加五行,然后移动到下一行,但是当你添加五行时,你的数据已经超过了第72行,当你到达代码中的第72行时,for循环停止,您80%以上的数据将位于第72行以下,并且不会被分割。@ScottCraner看一看。我总是喜欢看到您的快捷方式。我在这里学习的东西和帮助的东西一样多。如果@Ahmed把这句话改成正确答案,我会很好的。@ScottCraner谢谢你的客气话。如果你感兴趣,这里有一个很好的学习机会:@Ahmed你喜欢这个解决方案吗?@ScottCraner看一看。我总是喜欢看你的捷径。我在这里学习的东西和帮助的东西一样多。如果@Ahmed把这句话改成正确答案,我会很好的。@ScottCraner谢谢你的客气话。如果您感兴趣,这里有一个很好的学习机会:@Ahmed您喜欢这个解决方案吗?