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的增量。