Excel:用VBA命名的范围

我想用VBA在Excel中定义一个命名范围。 基本上,我有一个可变的列号。 然后循环运行以确定该特定列中的第一个空单元格。 现在我想定义一个从该特定列的第2行到该列中的数据的最后一个单元格(第一个空单元格-1)的命名范围。

例如,指定了第5列,其中包含3个值。 如果我是正确的,那么我的范围就是(2,5)(4,5)。 我只是想知道如何使用整数而不是(E2:E4)来指定这个范围。 这是否可能?

我发现这个代码来定义一个命名的范围:

'Change the range of cells (A1:B15) to be the range of cells you want to define Set Rng1 = Sheets("Sheet1").Range("A1:B15") ActiveWorkbook.Names.Add Name:="MyRange", RefersTo:=Rng1 

任何人都可以推动我正确的方向来指定这个范围只使用整数?

由于您定位的范围是E2:E4,您需要指定单元格的位置。 下面的函数可能对你有用,将它传递给列号,例如5,它将重新设置地址,使得5 = E和27 = AA

 ColLetter = ColNo2ColRef(colNo) Set Rng1 = Sheets("Sheet1").Range(ColLetter & "2:" & ColLetter & "4") ActiveWorkbook.Names.Add Name:="MyRange", RefersTo:=Rng1 Function ColNo2ColRef(ColNo As Long) As String ColNo2ColRef = Split(Cells(1, ColNo).Address, "$")(1) End Function 

希望这可以帮助

编辑:或者:

 Set rng = Range(Cells(2, 5), Cells(4, 5)) 'E2:E4 ActiveWorkbook.Names.Add Name:="MyRange", RefersTo:=Rng 

或者可选地

 Sub test() Set rng1 = Cells(2, 2) 'B2 Set rng2 = rng1.Resize(3, 1) 'B2:B4 'or Set rng2 = Range(rng1, Cells(4, 2)) 'B2:B4 End Sub 

或者直接做,不用循环使用

 With Sheet1 col = 5 'variable col Set rng1 = .Range(.Cells(2, col), .Cells(.Rows.Count, col).End(xlUp)) End With 

这是一样的

 with sheet1 Set rng1 = .Range(.Range("E2"), .Range("E" & .Rows.Count).End(xlUp)) end with 

编辑:如果你设置命名的范围dynamic变化,那么你不需要VBA。 直接在Excel中命名的范围内input,并让它在E2和任何最后一个项目之间自动自动调整(假定没有空白)。 =$E$2:INDEX($E$2:$E$5000,COUNTA($E$2:$E$5000)) (如果您需要更多行,请扩展5000)