Excel的Visual Basic中的variables范围

我想用VBA在Excelmacros中定义一个variables范围。 第一个单元总是A25,但是最后一个单元正在移动,取决于收集的数据的数量。 这可以是E35或E58等任何想法如何做到这一点?

有两个选项:

选项1 :你想要定义的Range是连续的(见下面的屏幕截图):

在这里输入图像说明

简单的方法将做到:

 Option Explicit Sub DefRange() Dim Rng As Range With Worksheets("Sheet1") '<-- modify "Sheet" to your sheet's name Set Rng = .Range("A25").CurrentRegion Debug.Print Rng.Address '<-- for debug: will show A25:E35 End With End Sub 

选项2:你想要定义的范围,在中间有一个空行(下面的屏幕截图):

在这里输入图像说明

那么以前的方法会导致错误的范围

 Option Explicit Sub DefRange() Dim Rng As Range Dim LastRow As Long Dim LastCol As Long With Worksheets("Sheet1") '<-- modify "Sheet" to your sheet's name Set Rng = .Range("A25").CurrentRegion Debug.Print Rng.Address '<-- for debug: will show A25:E35 ***WRONG*** 'Search for any entry, by searching backwards by Rows. LastRow = .Cells.Find(What:="*", After:=.Range("A25"), SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 'Search for any entry, by searching backwards by Columns. LastCol = .Cells.Find(What:="*", After:=.Range("A25"), SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column Set Rng = .Range(.Cells(25, "A"), .Cells(LastRow, LastCol)) Debug.Print Rng.Address '<-- for debug: will show A25:F37 ***CORRECT*** End With End Sub 

您可以将范围定义为其两个限制单元格。 假设您正在工作表“ws”中工作:

 Dim rng As Range Dim cl1 As Range: Set cl1 = ws.Range("A25") Dim cl2 As Range Set cl2 = ws.Range("E35") 'Or something else' Set rng = ws.Range(cl1, cl2) 

只需要计算E列的行数,

 Sub Button1_Click() Dim LstRw As Long Dim Rng As Range, x LstRw = Cells(Rows.Count, "E").End(xlUp).Row x = IIf(LstRw > 25, LstRw, 25) Set Rng = Range("A25:E" & x) Rng.Select End Sub