使用最后一列作为范围(F:LastColumn)

我正在尝试使用我的范围的最后一列: WS.range("F2:LastCol" & LastRow).Cells我的子作品

WS.range("F2:K" & LastRow).CellsLast Column是dynamic的,并不断变化

谢谢

 Sub QQ() Dim LastRow As Long Dim LastCol As Long Dim WS As Worksheet Dim rCell As range Set WS = Sheets("sheet1") LastRow = WS.range("F" & WS.Rows.Count).End(xlUp).Row LastCol = Cells(2, .Columns.Count).End(xlToLeft).Column 'Also tried: LastCol=rgRange.Cells(rgRange.Count).Column For Each rCell In WS.range("F2:LastCol" & LastRow).Cells STUFF 'The stuff works for WS.range("F2:K" & LastRow).Cells End Sub 

LastCol是一个数字,你用来指定范围的语法需要一个字母。

您可以find列号的列字母,并将其传递到您的范围定义中,如下所示:

 Sub DynamicRange() Dim startCol As String Dim startRow As Long Dim lastRow As Long Dim lastCol As Long Dim myCol As String Dim ws As Worksheet Dim rng As Range Dim cell as Range Set ws = ThisWorkbook.Sheets("Sheet1") startCol = "F" startRow = 2 lastRow = ws.Range(startCol & ws.Rows.Count).End(xlUp).Row lastCol = ws.Cells(2, ws.Columns.Count).End(xlToLeft).Column myCol = GetColumnLetter(lastCol) Set rng = ws.Range(startCol & startRow & ":" & myCol & lastRow) For Each cell In rng ' do stuff Next cell ' check the range we've set Debug.Print rng.Address End Sub Function GetColumnLetter(colNum As Long) As String Dim vArr vArr = Split(Cells(1, colNum).Address(True, False), "$") GetColumnLetter = vArr(0) End Function 

请尝试以这种方式定义您的循环:

 For Each rCell In WS.range(ws.Range("F2"), Ws.Cells(LastRow, LastCol)).Cells 

或者使用这个解决scheme可以更Activesheet (如果WSActivesheet ):

 For Each rCell In WS.range("F2", Cells(LastRow, LastCol)).Cells