使用Range函数返回E列中的所有值

时间:2018-01-23 00:54:42

标签: excel-vba vba excel

Sub Main()

    Dim sheet As Worksheet

    Range("A5:E273").Select

    'I want to dynamically get all the columns instead of hard-coding to
    'E273, say there are 400 and might increase later. 

    Range(sheet).Select

End

1 个答案:

答案 0 :(得分:1)

嗯,你有两个相互矛盾的问题:

  

"我想动态获取所有列..."

这并不代表我认为这句话的含义:

  

" E273,说有400,可能会在以后增加"

所以你要求获得所有列的第一点......第二点似乎是你指的是行。我将采取有根据的猜测并假设您的意图是行,因为剩余的(非常)提供了最小代码(A5:E273)。

您可以使用此功能轻松获取任何列中的最后一行:

Function LastRow(ByVal ws As Worksheet, Optional ByVal col As Variant = 1) As Long
    With ws
        .Cells(.Rows.Count, col).End(xlUp).Row
    End With
End Function

我建议不要在Excel中使用也称为对象的变量,在您的情况下,您声明sheet。如果您在VBE中键入Sheet并按 F1 ,您会看到它是半保留的属性名称:

  

返回指定的PublishObject对象的工作表名称。只读字符串。

     

<强>语法

     

表达 .Sheet

     

expression 表示 PublishObject 对象的变量。

     

<强>说明

     

此示例确定包含第一个 PublishObject 对象的工作表的名称,该对象在网页中保存为静态HTML。然后,该示例将布尔变量blnSheetFound设置为 True 。如果文档中没有项目保存为静态HTML,则blnSheetFound False

相反,您应该考虑另一个变量,例如ws

所以,你的最终结果如下:

Option Explicit

Function LastRow(ByVal ws As Worksheet, Optional ByVal col As Variant = 1) As Long
    With ws
        .Cells(.Rows.Count, col).End(xlUp).Row
    End With
End Function

Sub Main()

    Dim ws As Worksheet, myRng As Range
    Set ws = ThisWorkbook.Worksheets(1)
    Set myRng = ws.Range("A5:E" & LastRow(ws))

    myRng.Select

End