在VBA中访问动态命名范围

时间:2016-08-09 15:43:50

标签: excel vba matlab 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

我使用Excel作为用户界面。用户将数据放入Excel,然后从另一个将进行计算的程序(Matlab)读入。

为此,我使用VBA命令将其发送到Matlab并直接引用范围或命名范围:

MLPutMatrix "VARIABLE_NAME", Range("B8:B2954") 

MLPutMatrix "VARIABLE_NAME", Range("NamedRange")

我的问题是我不知道该范围的大小将提前,因为行数将根据用户放入Ex​​cel范围的数据而有所不同。

我尝试使用以下公式创建一个引用最后一个非空行的命名范围:

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

但是,使用公式定义的明显命名的范围不会显示在名称框中,并且无法在VBA脚本中使用,因此这不起作用。我需要手动创建一个名称,使其显示在名称框中并使用VBA访问它,但是如果我事先不知道我的范围尺寸,我当然不能这样做。

所以我的问题是:我需要找到一些方法能够通过名称或大小来引用动态范围,然后能够在VBA中引用它,以便我可以使用它将其发送到Matlab " MLPutMatrix"命令。

2 个答案:

答案 0 :(得分:1)

With Worksheets("mydata") '<--| change "mydata" with your actual sheet name
    MLPutMatrix "VARIABLE_NAME", .Range("B2", .Cells(.Rows.Count, "B").End(xlUp)) '<--| change "B2" to your actual first cell and "B" to your actual column data index
End With

答案 1 :(得分:1)

公式定义的命名范围不能在VBA中使用。如果您遇到问题,那么您的公式可能会出现问题。

引用范围的典型方法是:

=OFFSET(Sheet1!$A$1,0,0,COUNTA(Sheet1!$A:$A),2)