【问题标题】:Create a dynamic range, range(cells(), cells())创建一个动态范围,range(cells(), cells())
【发布时间】:2026-02-12 01:50:02
【问题描述】:

我需要创建一系列单元格,这些单元格会根据不同的人名而变化。对于每个人的姓名,我都有定义范围的行号和列号,这个数字位于工作表的某些单元格中。

例如,

行:

单元格(A5) = 3

单元格(A6) = 9

列:

单元格(A7) = 4 ---->(D 列)

所以,这组行数和列数给出的最终范围是 range("D3:D9")。对于另一个人的名字,我将有一个不同的范围,由一些其他数字给出的行和列位置。问题是每天都会添加新的或现有的人名,所以我无法创建命名范围,因为它每天都会改变。但是,单元格 A5/A6/A7 中的值正在捕获不同日期新范围位置的新信息。

我已经尝试构建这行代码,但它不起作用:

Sub Dynamic_Range()

Dim rng As Range

Set rng = Range(Cells(Range("A5").Value, Range("A7").Value), Cells(Range("A6").Value, Range("A7").Value))

End Sub

有人可以就此提出建议吗?

【问题讨论】:

  • 什么不起作用?你打算如何使用它(一个实际的例子)?名称位于何处?下一个人的数据在哪里?添加更多细节,可能是your post 的屏幕截图。

标签: excel vba dynamic range named-ranges


【解决方案1】:

更新

在我第一次回答这个问题后,我想到offset function 应该做你想做的事,这将避免 VBA。在同一个shared file,你应该可以看到一个例子。

原答案

您可能可以通过使用自定义函数来完成您想要的。我说可能是因为不清楚您的功能/范围是否跨越工作表。此外,这种方法使用 volatile 函数,如果文件很大,可能会导致一些性能问题。

话虽如此,下面是自定义函数根据一些输入参数创建范围的语法。

Function dynamicName(rowStart As Long, RowEnd As Long, theColumn As Long) As Range
    Application.Volatile
    Set dynamicName = Range(Cells(rowStart, theColumn), Cells(RowEnd, theColumn))
End Function

您可以在this sample file 中查看它的工作原理。如果我将此函数用于单元格F4

=SUM(dynamicName(HLOOKUP(F2,A4:B7,2,FALSE),HLOOKUP(F2,A4:B7,3,FALSE),HLOOKUP(F2,A4:B7,4,FALSE)))

【讨论】: