我刚刚想知道我是否可以某种方式改变以下代码段以包含.End(xlToRight)
而不是定义L6
(结果是相同的)。
Sub Test()
Dim LastCol As String
With Worksheets("Sheet1")
LastCol = .Cells(5, .Columns.Count).End(xlToLeft).Address
.Range(Range("A5"), LastCol).Copy
.Range("B5:L5", Range("B5:L5").Offset(LastRow - FirstRow, 0)).PasteSpecial xlPasteFormulas
.Range("B6", .Cells.SpecialCells(xlCellTypeLastCell)).Copy
.Range("B6").PasteSpecial xlPasteValues
End With
End Sub
非常感谢任何帮助:)
编辑:更新了pdw TonyDallimore (请参阅下面的回复)
Tony,上面的代码是我一直努力工作的总和。在with
语句中,我希望复制第5行的内容,并将它们粘贴到第n行 - 这是由columnA中已存在的列表定义的。根据您的建议,最后一行将粘贴除顶行(r5)之外的所有值,以保持用户的透明度,同时最小化文件大小。
中间位是剩余的“正在进行的工作”,因为L5不一定是最重要的列。
答案 0 :(得分:5)
这两个问题
.End(xxx)
与键盘上的Ctrl+Arrow
相同,并停在与当前单元格不同的第一个单元格。因此,如果您从具有值的单元格开始,它将在没有值的单元格处停止,反之亦然。
从左上角开始并使用xlDown
和xlToRight
时遇到的问题是,它会停在桌子中间的空白单元格中。如果绝对不能在中间有一个空白单元格,那就很好,但是从右下方XlUp
或xlToLeft
更安全。
问题1
你的问题是.End(xxx).Column
会返回12并且你不知道怎么把它变成字母“L”吗?
是这样,有很多选择。我认为最容易记住的是
.Cells(6,Columns.Count).End(xlToLeft).Address
将返回“$ L $ 6”。
问题2
.Cells(1000, ColRange)
代表右下角的细胞吗?
.Cells.SpecialCells(xlCellTypeLastCell)
可能是一个更容易的选择。