我有一个Excel工作表充满了数据节,每个数据节由一个空行分隔。
当我在工作表的每一行上循环时,我需要找到下一个空白行的索引,这样我就可以知道当前数据节的结束位置,并在传递到下一个数据节之前对其进行修改。
下面是我的第一个循环的例子(在这个循环中,我需要找到下一个空行的索引):
Dim x As Integer
Dim lastrow As Long
lastrow = Cells(Rows.Count, "A").End(xlUp).Row
Range("A1").Select
For x = 1 To lastrow
If Left(Cells(x, "A").Value, 8) = "!JOURNAL" And Not (IsEmpty(Cells(x, "H"))) Then
'''Here I need to add another loop to find the index of my next blank row please'''
idxblankrow = Range(Cells(x, "A")).CurrentRegion.Row
MsgBox "Idx blank row is " & idxblkrow
Range(Cells(x + 2, "A"), Cells(idxblankrow - 1, "H")).Cut Range(Cells(x + 2, "B"), Cells(idxblankrow - 1, "I"))
Range(Cells(x, "H")).Select
Selection.Copy
Range(Cells(x + 2, "A"), Cells(idxblankrow - 1, "A")).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
End If
Next
下面是另一个失败的尝试(第二个嵌套的For循环试图搜索空行):
Dim x As Integer
Dim lastrow As Long
lastrow = Cells(Rows.Count, "A").End(xlUp).Row
For x = 1 To lastrow
If Left(Cells(x, "A").Value, 8) = "!JOURNAL" And Not (IsEmpty(Cells(x, "H"))) Then
For j = x To lastrow
If IsEmpty(Cells(j, "A")) Then idxblankrow = Cells(j, "A").Row
MsgBox "blank row " & idxblankrow
Exit For
End If
Range(Cells(x + 2, "A"), Cells(idxblankrow - 1, "H")).Cut Range(Cells(x + 2, "B"), Cells(idxblankrow - 1, "I"))
Range(Cells(x, "H")).Select
Selection.Copy
Range(Cells(x + 2, "A"), Cells(idxblankrow - 1, "A")).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
End If
Next
任何形式的帮助都将不胜感激,谢谢!
4条答案
按热度按时间kx5bkwkv1#
请使用下一种适应方式。它不选择,不使用剪贴板:
你现在可能需要用已经处理的行数来增加x,但是你必须用语言解释你试图完成什么。猜测不是一种合适的工作方式......
wooyq4lh2#
如果我想知道一整行是否为空,我只需要连接整行并检查长度,如果长度为零,那么该行为空,否则,该行就不是空的。
参见下面的示例性屏幕截图(只有第四行是空的,这在第四个公式中可见,结果为零):
l0oc07j23#
使用标志来标识组的开始和结束。这处理组之间的多个空行。
jum4pzuy4#
所有这些答案都可以简单得多,想想这个:
要进行演示,请运行以下宏:
这段代码循环遍历前50行,寻找下一个空行,找到后赋给变量iNextBlankRow,直到当前行(r)大于或等于INextBlankRow时才更新变量iNextBlankRow,此时我们再从下一行开始查找。