Excel中的变量命名范围

时间:2016-08-03 14:37:28

标签: excel vba excel-vba

我在Excel中有一个格式如下的表:

Date      Asset Return
1/3/2005    0.003582399
1/4/2005    -0.01908258
1/5/2005    0.002080625
1/6/2005    0.005699497
1/7/2005    -0.008040505
1/10/2005   -0.00339116
1/11/2005   -0.009715187
1/12/2005   0.002371855
1/13/2005   -0.00580783
1/14/2005   0.001058481
1/18/2005   0.015483842
1/19/2005   -0.014690715
1/20/2005   -0.015714799
1/21/2005   -0.010796326

我需要一个命名范围来引用每一列。工作簿是一个模板,因此命名范围不会始终覆盖相同的行数,具体取决于数据。我想设置它以便命名范围"日期"和指定的范围"资产回报"自动调整大小以覆盖从第一个值到最后一个值的整个列,而不超过列中的最后一个值。

它始终从单元格B8开始,但可能会根据数据的大小结束于不同的行。

如何设置动态命名范围来完成此操作?

2 个答案:

答案 0 :(得分:3)

此命名范围公式将执行此操作:

=Sheet1!$B$8:INDEX(Sheet1!$B:$B,COUNTA(Sheet1!$B:$B)+8)

请记住添加工作表名称,否则命名范围将在活动工作表上运行。

公式开始以B8为起点:Sheet1!$B$8
然后计算B列中有多少单元格不为空:COUNTA(Sheet1!$B:$B)
它会增加8个计数(假设你的第一行是空白的) 然后,它使用INDEXCOUNTA来引用最后一个单元格。

https://support.office.com/en-gb/article/INDEX-function-a5dcf0dd-996d-40a4-a822-b56b061328bd
https://support.office.com/en-gb/article/COUNTA-function-7dc98875-d5c1-46f1-9a82-53f3219e2509

答案 1 :(得分:1)

试试这个VBA代码

Sub test()
    application.DisplayAlerts = false
    Range("B8").currentregion.createnames _
        top:true, right:=false, left:=false, bottom:=false
    application.DisplayAlerts = true
end sub