Excel VBA - 选择一个动态单元格范围

11

我希望能够动态选择一组单元格(标题行),该行为第1行,但列将从第1列到最后一列,其中“A”是第一列,“M”是最后一列。我知道如何找到最后一列,但我不知道如何修改下面的范围以输入“A”和“M”作为第一列和最后一列。

 Range("A1:M1").Select
4个回答

20

如果您想选择包含所有标题单元格的变量范围:

Dim sht as WorkSheet
Set sht = This Workbook.Sheets("Data")

'Range(Cells(1,1),Cells(1,Columns.Count).End(xlToLeft)).Select '<<< NOT ROBUST

sht.Range(sht.Cells(1,1),sht.Cells(1,Columns.Count).End(xlToLeft)).Select

只要该行上没有其他内容,就可以使用这种方法。

编辑:更新强调使用 Range(Cells(...), Cells(...)) 时,最好同时使用工作表引用限定 RangeCells


12
sub selectVar ()
    dim x,y as integer
    let srange = "A" & x & ":" & "m" & y
    range(srange).select
end sub

我认为这是最简单的方法。


1
谢谢,这在Excel 2016中完美地运行了。 - Joel Trauger

4

所以这取决于你想如何选择增量器,但这应该可以解决:

Range("A1:" & Cells(1, i).Address).Select

在这里,i 是代表你想要选择的列的变量(1=A,2=B等)。如果你想按列字母进行选择,我们也可以进行调整 :)

如果你想使起始位置也是动态的,你可以尝试以下代码:

Sub SelectCols()

    Dim Col1 As Integer
    Dim Col2 As Integer

    Col1 = 2
    Col2 = 4

    Range(Cells(1, Col1), Cells(1, Col2)).Select

End Sub

0

我最喜欢使用这种方法,它会自动选择从第一列到最后一列被使用的范围。然而,如果第一行中的最后一个单元格或第一列中的最后一个单元格为空,则此代码将无法正确计算。请查看链接以获取其他动态选择单元格范围的方法。

Sub DynamicRange()
'Best used when first column has value on last row and first row has a value in the last column

Dim sht As Worksheet
Dim LastRow As Long
Dim LastColumn As Long
Dim StartCell As Range

Set sht = Worksheets("Sheet1")
Set StartCell = Range("A1")

'Find Last Row and Column
  LastRow = sht.Cells(sht.Rows.Count, StartCell.Column).End(xlUp).Row
  LastColumn = sht.Cells(StartCell.Row, sht.Columns.Count).End(xlToLeft).Column

'Select Range
  sht.Range(StartCell, sht.Cells(LastRow, LastColumn)).Select

End Sub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接