在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")
我的问题是我不知道该范围的大小将提前,因为行数将根据用户放入Excel范围的数据而有所不同。
我尝试使用以下公式创建一个引用最后一个非空行的命名范围:
Sheet1!$B$8:INDEX(Sheet1!$B:$B,COUNTA(Sheet1!$B:$B)+8)
但是,使用公式定义的明显命名的范围不会显示在名称框中,并且无法在VBA脚本中使用,因此这不起作用。我需要手动创建一个名称,使其显示在名称框中并使用VBA访问它,但是如果我事先不知道我的范围尺寸,我当然不能这样做。
所以我的问题是:我需要找到一些方法能够通过名称或大小来引用动态范围,然后能够在VBA中引用它,以便我可以使用它将其发送到Matlab " MLPutMatrix"命令。
答案 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)