【问题标题】:Range in Excel to go from a specific cell to the end of the columnExcel中的范围从特定单元格到列的末尾
【发布时间】:2015-07-08 23:05:33
【问题描述】:

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

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

结束子

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

【问题讨论】:

    标签: vba excel range


    【解决方案1】:

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

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

    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. 代码有点长,因为我们需要调整目标的大小才能接收值。如前所述,一个或多个 var 可以整齐地清理它。
    2. 创建Range(Cells, Cells.End) 类型的单元格范围引用时,请确保Range object 中的Range.Cells property 知道它们的Range .Parent property 是什么。在这种情况下,我使用了With...End With statement 并在.Cells 前加上句点(也称为句号),以便他们知道自己属于Worksheets("Sub")
    3. 使用Application.Transpose 将值的列翻转为行。

    【讨论】:

    • 不错的答案,它删除了整个“.select”业务,这很好学。
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 注意Range 中的Cells 知道他们的父级在哪里。见this
    猜你喜欢
    • 1970-01-01
    • 2014-11-21
    • 2017-12-31
    • 1970-01-01
    • 2014-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多