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

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

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

结束小组

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

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

这可能会使用一个或两个variables来清理代码。

 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. 代码有点长,因为我们需要调整目标的大小,以便接收值。 如上所述,一个或多个增值业务将整理清理。
  2. 创buildRange(Cells, Cells.End)types的单元格区域引用时,请确保Range对象内的Range.Cells属性知道它们的Range .Parent属性是什么。 在这种情况下,我使用了With … End With语句,并使用句点(又名句号 )作为前缀.Cells ,以便他们知道它们属于Worksheets("Sub")
  3. 使用Application.Transpose将值的列翻转成行。

你可以这样做: 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