【发布时间】:2017-08-29 05:18:33
【问题描述】:
VBA 中的相对新手,需要一些帮助来修改代码以适应特定用例。除了修改代码之外,我已经搜索了高低,但迄今为止未能成功找到类似的用例 // 自行执行必要的更改。
用例:有一个导出的报告,该报告在一个工作表中生成多个报告,所有报告在包含总计的行之后由一个空格分隔。每个报告的名称是静态的,但每个报告中包含的数据量是动态的(它可以包含多少行)。
我需要在 Sheet1 中的“A”列中搜索特定值的代码(在附件中的示例中,报告标题将是“Extra Header A”)。然后(最好)从“Extra Header A”下的下一行复制到“Data 9”行下的空白处,并从“Header B”到“Header E”的列复制到Sheet2(“A1”)。
用例图片:
下面列出的代码是我发现的适度成功的代码(抱歉,源代码不可用,因为我已经把它放在一起弗兰肯斯坦了)。这段代码的当前问题是,它本质上似乎只是静态的(通过修改 if 语句范围方法),并且不考虑每个动态报告中的行数。
Sub Cells_Loop()
Dim c As Range, lastrow As Long
lastrow = Cells(Rows.Count, 1).End(xlUp).Row
Application.ScreenUpdating = False
For Each c In Range("A1:A500" & lastrow)
If c.Value = "Extra Header A" Then Range("A" & c.Row & ":D" & c.Row).Copy Worksheets("Sheet2").Range("A" & 1)
Next c
Worksheets("Sheet2").Rows(1).Delete Shift:=xlUp
Application.ScreenUpdating = True
End Sub
我们将非常感谢提供任何帮助!提前致谢。
edit 添加了另一张图片作为附加上下文。红色是我希望避免的数据,而蓝色是目标数据。 Image 2
【问题讨论】:
-
For Each c In Range("A1:A500" & lastrow)毫无意义。将其更改为For Each c In Range("A1:A" & lastrow)以使其动态。此外,您有一个If声明,没有End If。另外,循环外的删除行有什么意义??? -
Dwirony,感谢您指出 End If 已解决。删除行删除了从我的原始代码提交中复制过来的“Extra Header A”行,因为它不需要。再次感谢您迄今为止的帮助。不幸的是,仍然需要了解如何在到达空白行后添加断点以进行复制。继续拉入工作表上所有剩余的行,即使它遇到空行(延续到工作表上的下一个报告)。
-
空白单元格在哪里,B-D 中的任何单元格?
-
哪个更容易完成,我将采取:可能是 Totals 行上“Header B”下的空白单元格,或者.. 可能是 Totals 行正下方的行。无论如何,在总计行之后的“空白行”之后会立即生成另一个报告(我需要避免)。我希望这是有道理的。
-
在下面查看我的答案。如果 B 列中的单元格为空白,它将跳过该行。