我有一个excel工作表,其中包含A列中的示例数据 第1行有一个 第2行有b 第3行有c 第4行 第5行有d
使用我的宏我想在所选单元格中的数据上方添加一个新行。由于第1行单元格有数据" a"宏应该添加一行并转到下一个单元格。第4行没有数据,所以它应该跳过这一行检查下一个
我有下面的宏
FinalRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
FinalRow1 = FinalRow + FinalRow
ActiveSheet.Range("A1").Select
For i = 1 To FinalRow1
If Cells(i, 1).Value = vbNullString Then
ActiveCell.Offset(rowOffset:=1, columnOffset:=0).Activate
Else
Selection.EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove
ActiveCell.Offset(rowOffset:=2, columnOffset:=0).Activate
'ActiveCell.Offset(rowOffset:=1, columnOffset:=0).Activate
End If
Next i
它似乎有时会工作,有时候它根本不会添加预期的行。
有人可以帮忙吗
答案 0 :(得分:0)
FASTEST和DIRTY答案是:
FinalRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
FinalRow1 = FinalRow + FinalRow
ActiveSheet.Range("A1").Select
For i = 1 To FinalRow1
If Cells(i, 1).Value = vbNullString Then
ActiveCell.Offset(rowOffset:=1, columnOffset:=0).Activate
Else
Selection.EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove
ActiveCell.Offset(rowOffset:=2, columnOffset:=0).Activate
I = I +1 ' BECAUSE you have increased the next row number by 2
End If
Next i
真正的问题:你有一个包含2个运行数据的循环:
当您插入行时,它们将不再显示相同的数据。
会更好
无论哪种方式都可以,但你混合了 - 在我的回答中我留下了这个混合,只关注那个循环varable我和ActiveCell.Offset应该在偏移..; - )
答案 1 :(得分:0)
对您的代码进行了一些更改。但是从最后一行循环到第一行总是更好。
Sub Demo()
Dim flag As Boolean
finalrow = Cells(Rows.count, 1).End(xlUp).Row + 1
FinalRow1 = finalrow + finalrow
ActiveSheet.Range("A1").Select
flag = False
For i = 1 To FinalRow1
If ActiveCell.Value = vbNullString Then
ActiveCell.Offset(rowOffset:=1, columnOffset:=0).Activate
flag = True
Else
If flag = False Then
Selection.EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove
ActiveCell.Offset(rowOffset:=2, columnOffset:=0).Activate
Else
flag = False
ActiveCell.Offset(rowOffset:=1, columnOffset:=0).Activate
End If
End If
Next i
End Sub
此代码的一个缺点是,在不需要的情况下,它会循环几次,会在某些时候对其进行处理。