首页 > 解决方案 > 创建一个动态范围,range(cells(), cells())

问题描述

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

例如,

行:

单元格(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

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

标签: excelvbadynamicrangenamed-ranges

解决方案


更新

在我第一次回答这个问题后,我想到偏移函数应该做你想做的事,这将避免 VBA。在同一个共享文件中,您应该可以看到一个示例。

原始答案

您可能可以通过使用自定义函数来完成您想要的。我说可能是因为不清楚您的功能/范围是否跨越工作表。此外,这种方法使用 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

您可以在这个示例文件中看到它是如何工作的。如果我将此功能用于单元格F4

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

在此处输入图像描述

在此处输入图像描述


推荐阅读