【发布时间】:2012-12-03 15:25:39
【问题描述】:
好的,我试图寻找类似的问题,但我不太了解所讨论的内容,因为这是我第一次查看 Excel 的 VBA 编辑器。
简单来说,我有 2 个电子表格:“Sheet1”和“Sheet2”
表 1:
A B
1 Header1 Header2
2 Text1 Info1
3 Text2 Info2
表 2:
A B
1 Header1 Header2
2 Text3 Info3
3 Text4 Info4
我想有一个宏将两张表合并成一个新表(Sheet3),如下所示:
A B
1 Header1 Header2
2 Text1 Info1
3 Text2 Info2
4 Text3 Info3
5 Text4 Info4
我已尝试录制宏并将其保存以备后用。为此,我创建了一个新工作表,将 Sheet1 中的所有内容复制/粘贴到 Sheet3,然后将除标题之外的所有信息从 Sheet2 复制到 Sheet3。
好吧,宏适用于该数据,但我发现 excel 生成的代码使其在粘贴数据之前选择单元格 A4(此处)。虽然这适用于此数据,但如果每张工作表中的记录数不时更改,它将不起作用。基本上,
1) 我想知道是否有一个函数可以在粘贴下一组数据之前自动转到最后一个相关单元格(在本例中为单元格 A4,如果我还有一个表格,则为单元格 A6)。
2) 我已经看到函数“ActiveCell.SpecialCells(xlLastCell).Select”(在我使用 Ctrl+End 时激活),但这会将我带到工作表的末尾。使用该功能后,我需要类似于“Home”和“Down”箭头键的东西才能发挥最佳效果。
这些选项中的任何一个都适合我。 ^_^
这是我当前从 excel 2010 中的宏记录器记录的 VBA 代码:
Sub Collate_Sheets()
Sheets.Add After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Select
Sheets(Sheets.Count).Name = "Sheet3"
Sheets("Sheet1").Select
Range("A1").Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Selection.Copy
Sheets("Sheet3").Select
ActiveSheet.Paste
ActiveCell.SpecialCells(xlLastCell).Select
' I need to select one cell below, and the cell in column A at this point
Sheets("Sheet2").Select
Range("A2").Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Sheet3").Select
ActiveSheet.Paste
End Sub
我希望我没有忘记任何有用的信息。如果我这样做了,请告诉我!
【问题讨论】:
-
哦,谢谢道格!我不知道论坛选择了足够的语法突出显示^^;
-
要获取最后一个真正使用的单元格下面的行,您可以写
Range("A" & Rows.Count).End(xlup).Offset(1)。将"A"替换为您需要的任何列。 -
不客气,杰瑞。要突出显示,只需突出显示您的代码,然后单击顶部的代码图标。看起来像
{}。 -
嗯,我收到一个错误:“编译错误:属性使用无效”,它突出显示“偏移”。嗯,我刚刚注意到我在原来的帖子中犯了一个错误。它应该是 Excel 2010 而不是 2007。不确定这是否是问题所在。我马上改正。
-
杰瑞,关于如何实现我所引用的原则的更详细代码,请参见下面的答案。