我需要在两个命名单元格之间创建一个动态范围(单元格和相应的行不应包含在选择中) . 列数总是相同的(4),只有行数在变化 . 这是第一步 . 第二个是将几个这些范围放入另一个excel列表中的编号列表中,但这是我希望自己能够找到的东西 . 非常感谢你 .
我可能会尝试这样的事情:
Sub RangeBetween() Dim rng1 As Range, rng2 As Range Dim betRange As Range Set rng1 = Range("A1") 'sample data Set rng2 = Range("A20") Set betRange = Range(rng1.Offset(1, 0).Address & ":" & rng2.Offset(-1, 3).Address) End Sub
这当然是假设您的命名单元格位于同一列 . 如果您的命名单元格默认情况下始终展开4列,请将偏移量(-1,3)替换为偏移量(-1,0) .
此代码定义名为“NewNamedRange”的命名范围 . 该代码假设(并要求)您的包围单元已经命名为范围,名称为“UpperLeft”和“LowerRight” . 偏移公式从命名范围中排除包围单元格 . 因此,如果“UpperLeft”是单元格D2,“LowerRight”是单元格G22,则“NewNamedRange”将是“D3:G21”的范围 . 由于命名范围定义是公式,因此当包围单元格定义更改时,NewNamedRange将动态更改 . 希望这可以帮助 .
Sub NamedRange() ActiveWorkbook.Names.Add _ Name:="NewNamedRange", _ RefersTo:="=OFFSET(UpperLeft,1,0):OFFSET(LowerRight,-1,0)" End Sub
2 回答
我可能会尝试这样的事情:
这当然是假设您的命名单元格位于同一列 . 如果您的命名单元格默认情况下始终展开4列,请将偏移量(-1,3)替换为偏移量(-1,0) .
此代码定义名为“NewNamedRange”的命名范围 . 该代码假设(并要求)您的包围单元已经命名为范围,名称为“UpperLeft”和“LowerRight” . 偏移公式从命名范围中排除包围单元格 . 因此,如果“UpperLeft”是单元格D2,“LowerRight”是单元格G22,则“NewNamedRange”将是“D3:G21”的范围 . 由于命名范围定义是公式,因此当包围单元格定义更改时,NewNamedRange将动态更改 . 希望这可以帮助 .