我需要创建一系列的单元格,这些单元格将随不同的人名而变化。对于每个人名,我都有定义范围的行号和列号,这个数字位于工作表的某些单元格中。
例如,
行:
单元格(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有人能在这方面给点建议吗?
发布于 2021-10-10 23:50:09
更新
在我第一次回答这个问题后,我突然想到offset function应该做你想做的事情,这样就可以避免使用VBA。在同一个shared file中,您应该能够看到一个示例。
原始答案
您可能可以通过使用自定义函数来实现您想要的功能。我说可能是因为不清楚你的函数/范围是不是交叉表。此外,这种方法使用了一个易失性函数,如果它是一个大文件,这可能会导致一些性能问题。
也就是说,下面是一个自定义函数的语法,它根据一些输入参数创建一个范围。
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)))


https://stackoverflow.com/questions/69519313
复制相似问题