Excel中的范围从特定单元格到列末尾

时间:2015-07-08 23:05:33

标签: excel vba excel-vba range

我想知道如何定义一个范围,以便从 C5 定义一直到列的最后一个值。 C5 是一个常量,但列表的末尾不是。

Sub Merge()
Worksheets("Sub").Range("C5").End(xlToLeft).Select.copy
Worksheets("Master Worksheet").Range("A1:A23").PasteSpecial Paste:=xlPasteValues

End Sub

我得到一个超出范围错误的下标。任何指导都会非常好。

2 个答案:

答案 0 :(得分:3)

您不必复制和粘贴特殊值。直接传输值并避免使用剪贴板。

这可能会使用一个或两个变量赋值来清理代码。

With Worksheets("Sub")
    Worksheets("Master Worksheet").Range("A1") _
      .Resize(.Range(.Cells(5, 3), .Cells(5, Columns.Count).End(xlToLeft)).Columns.Count, 1) = _
      Application.Transpose(.Range(.Cells(5, 3), .Cells(5, Columns.Count).End(xlToLeft)).Value)
End With
  1. 代码有点长,因为我们需要调整目标大小才能接收值。如上所述,一个或多个vars会整洁地清理它。
  2. 创建Range(Cells, Cells.End)类型的小区范围参考时,请确保Range.Cells property内的Range object知道他们的Range .Parent property是什么。在这种情况下,我使用With...End With statement并在.Cells前加上句点(又名句号),以便他们知道它们属于Worksheets("Sub")
  3. 使用Application.Transpose将值列翻转为行。

答案 1 :(得分:1)

你可以这样做:Worksheets("Sub").Range(Cells(5,3),Cells(5,Cells(5,3).End(xltoLeft).column)).Select

这将从单元格C5(又名单元格(5,3))开始,然后向左移动。

编辑:正如Jeeped指出的那样,做起来可能会更好:

With Worksheets("Sub")
    .Range(.Cells(5,3),.Cells(5,.Cells(5,3).End(xlToLeft).Column)).Select
End With