Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.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 VBA For循环,变量索引不起作用_Excel_For Loop_Vba - Fatal编程技术网

Excel VBA For循环,变量索引不起作用

Excel VBA For循环,变量索引不起作用,excel,for-loop,vba,Excel,For Loop,Vba,我的数据集如下所示 Name ID Alice 1 Alice 2 Alice -4 Bob 4 Bob 7 2344 9 2344 10 4I 99 4I 04 我希望它看起来像这样: Name ID Alice 1 Alice 2 Alice -4 Name ID Bob 4 Bob 7 Name ID 2344 9 2344 10 Name

我的数据集如下所示

Name    ID

Alice   1

Alice   2

Alice   -4

Bob    4

Bob    7

2344   9

2344   10

4I    99

4I   04
我希望它看起来像这样:

Name    ID

Alice   1

Alice   2

Alice   -4



Name    ID

Bob    4

Bob    7




Name    ID

2344   9

2344   10



Name    ID

4I    99

4I   04
每次名称条目更改时,我都要引入1个空行和一行标题

    Sub insertingrows()


  FinalColumn = Cells(1, Columns.Count).End(xlToLeft).Column
  FinalRow = Cells(Rows.Count, 1).End(xlUp).Row

  For j = 3 To FinalRow

    If Cells(j, 2) <> Cells(j - 1, 2) Then
        'Rows(j & ":" & j + 2).Insert
        Rows(j).Insert
        Rows(1).Copy
        Rows(j + 1).Insert
        FinalRow = FinalRow + 2
        j = j + 2
    End If

  Next j



End Sub
子插入行()
FinalColumn=单元格(1,Columns.Count).End(xlToLeft).Column
FinalRow=单元格(Rows.Count,1).End(xlUp).Row
对于j=3到最终箭头
如果单元格(j,2)单元格(j-1,2),那么
'行(j&':“&j+2).插入
第(j)行。插入
第(1)行。复制
行(j+1)。插入
最终流动=最终流动+2
j=j+2
如果结束
下一个j
端接头

我的初始实际数据有3830行,但即使我在循环中更新变量FinalRow,循环仍在3830左右停止,并且留下了很多未完成的过程。这是对的限制吗?我应该使用其他类型的循环吗

循环开始时,的
边界计算一次,然后变为平面数。如果要更改边界,请退回到
Do
循环:

j = 3
Do

    If Cells(j, 2) <> Cells(j - 1, 2) Then
        'Rows(j & ":" & j + 2).Insert
        Rows(j).Insert
        Rows(1).Copy
        Rows(j + 1).Insert
        FinalRow = FinalRow + 2
        j = j + 3
    End If

Loop While j < FinalRow
j=3
做
如果单元格(j,2)单元格(j-1,2),那么
'行(j&':“&j+2).插入
第(j)行。插入
第(1)行。复制
行(j+1)。插入
最终流动=最终流动+2
j=j+3
如果结束
当j
假设您的工作表如下所示

Name    ID

Alice   1

Alice   2

Alice   -4

Bob    4

Bob    7

2344   9

2344   10

4I    99

4I   04

将此代码放入模块中

Option Explicit

Sub Sample()
    Dim ws As Worksheet
    Dim lRow As Long, i As Long

    Set ws = ThisWorkbook.Sheets("Sheet1")

    Application.ScreenUpdating = False

    With ws
        lRow = .Range("A" & .Rows.Count).End(xlUp).Row

        For i = lRow To 3 Step -1
            If .Cells(i, 1).Value <> .Cells(i - 1, 1).Value Then
                .Rows(i).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
                .Cells(i, 1).Value = "Name": .Cells(i, 2).Value = "ID"
                .Rows(i).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
            End If
        Next i
    End With

    Application.ScreenUpdating = True
End Sub
选项显式
子样本()
将ws设置为工作表
朦胧如长,我如长
设置ws=ThisWorkbook.Sheets(“Sheet1”)
Application.ScreenUpdating=False
与ws
lRow=.Range(“A”&.Rows.Count).End(xlUp).Row
对于i=L,请转至3步骤-1
如果.Cells(i,1).Value.Cells(i-1,1).Value那么
.行(i).插入Shift:=xlDown,CopyOrigin:=xlFormatFromLeftOrAbove
.Cells(i,1).Value=“Name”:.Cells(i,2).Value=“ID”
.行(i).插入Shift:=xlDown,CopyOrigin:=xlFormatFromLeftOrAbove
如果结束
接下来我
以
Application.ScreenUpdating=True
端接头
输出


数据是否总是被排序?不,但我将在VBA脚本中添加一个排序命令。您必须使用相反的命令loop@SiddharthRout什么是反向循环?我正要发布答案,但既然@rdhs已经做了,我将传递这个:)酷,谢谢!很高兴知道Do能够适应边界的变化。正如我在上面的评论中所写的,在过去的50分钟里,我尝试运行您的脚本大约5次,每次我的excel崩溃,只是冻结,没有响应。但当我运行旧脚本时,它运行得很好(尽管它停在第3830行)。猜猜看?当你在循环中增加
j
时,你是像我一样做
j=j+3
,还是像你的
循环中的
j=j+2
一样?我做了j=j+3,就像你改变它一样,因为没有下一个j的增量。