使用VBA声明相对于活动单元格的范围

Blu*_*rry 8 excel vba excel-vba

我需要声明一个相对于活动单元格的范围对象.问题是,每次宏运行时,我想要选择的行数和列数都不同.

例如,我有两个变量:numRowsnumCols.

我想在左上角选择一个具有ActiveCell的范围,手中有一行ActiveCell.Row + NumRows和右下角的ActiveCell.Column + NumCols列(然后我打算将这些数据复制到一个数组中)加速我的宏).

有关如何做到这一点的任何建议?

小智 14

Range类上有一个.Offset属性,可以让您完成所需的操作

ActiveCell.Offset(numRows, numCols)

跟进评论:

Dim newRange as Range
Set newRange = Range(ActiveCell, ActiveCell.Offset(numRows, numCols))
Run Code Online (Sandbox Code Playgroud)

你可以通过验证 MsgBox newRange.Address

以下是如何将此范围分配给数组


Jea*_*ett 8

像这样:

Dim rng as Range
Set rng = ActiveCell.Resize(numRows, numCols)
Run Code Online (Sandbox Code Playgroud)

然后将该范围的内容读取到数组:

Dim arr As Variant
arr = rng.Value
'arr is now a two-dimensional array of size (numRows, numCols)
Run Code Online (Sandbox Code Playgroud)

或者,选择范围(我不认为这是你真正想要的,但你在问题中要求这个).

rng.Select
Run Code Online (Sandbox Code Playgroud)

  • ++我喜欢替代方案,我相信这是实现OP在这种情况下所要求的更好的方法. (3认同)