【发布时间】:2014-09-08 20:40:52
【问题描述】:
我对 vba 很陌生。在我决定发布这个问题之前,我做了一些研究并找到了类似的解决方案,但无法成功实现代码。 http://www.mrexcel.com/forum/excel-questions/715128-visual-basic-applications-copy-paste-entire-row-second-sheet-based-cell-value.html
我使用的是 Microsoft Excel 2010 和 Windows 7。基本上,我使用外部软件将原始数据生成到名为“数据”的空白工作簿表中。我想从工作表“数据”中复制数据并将其呈现在一个名为“摘要”的工作表中。 (我想添加小计):
使用 SQL Server,我将 A 列输入为“1”或“2”。具有值“1”的行将从“摘要”表的第 6 行 C 列开始放置。具有值“2”的行将在第一个数据集小计之后的两行开始,并带有列标题。我还想从“摘要”表中排除 A 列。我还包括了我开始处理的代码。我知道我插入的代码是错误的,这就是我发布这个问题的原因:
Sub CopyData()
Dim lr As Long, lr2 As Long, r As Long
lr = Sheets("Data").Cells(Rows.Count, "A").End(xlUp).Row
lr2 = Sheets("Summary").Cells(Rows.Count, "A").End(xlUp).Row
For r = lr To 2 Step -1
If Range("A" & r).Value = "1" Then
Rows(r).Copy Destination:=Sheets("Summary").Range("A" & lr2 + 1)
lr2 = Sheets("Summary").Cells(Rows.Count, "A").End(xlUp).Row
End If
If Range("A" & r).Value = "2" Then
Rows(r).Copy Destination:=Sheets("Sheet1").Range("A" & lr2 + 1)
lr3 = Sheets("Sheet1").Cells(Rows.Count, "A").End(xlUp).Row
End If
Range("A1").Select
Next r
End Sub
我在正确的轨道上吗?有人可以帮忙吗?
【问题讨论】:
-
I understand that the code I inserted is wrong,怎么了?它运行吗?如果是这样,它在做什么是您不期望的?如果不是,Excel 在哪里抛出错误,它抛出的错误是什么? -
我没有收到错误消息,并且“数据”表中的任何数据都没有插入到“摘要”选项卡中。我还想知道您是否可以为我上面提到的两个结果集添加小计提供一些帮助。请注意,在我的代码中,我指定了正确的“摘要”选项卡 - Rows(r).Copy Destination:=Sheets("Summary").Range("A" & lr2 + 1) 和 lr2 = Sheets("Summary ").Cells(Rows.Count, "A").End(xlUp).Row
-
代码看起来没问题。而不是每次都使用 find last row 行,你可以只做 lr2=lr2+1 因为你总是复制 1 行。做的时候选data sheet吗?您是否尝试过单步执行代码以查看它实际在做什么?添加手表以确保它确实像您期望的那样逐步穿过线条。要排除 A 列,最简单的方法是删除最后的列。
-
我要复制的不仅仅是一行。 A 列可能有 4 个“1”值,所以我将复制 4 行。那会是对的吗?另外,如何将小计添加到这两个结果集中?
-
看起来您已经有了答案,但对复制一行进行了澄清。每次通过循环,您只复制一行。 lr=1 复制一行 lr 现在等于 2,复制一行 lr 现在是 3。因此,您无需查找最后一行,只需添加一个即可。
标签: vba excel excel-2010