【问题标题】:Accessing Dynamic Named Ranges in VBA在 VBA 中访问动态命名范围
【发布时间】:2016-08-09 23:52:58
【问题描述】:

在 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”命令。

【问题讨论】:

  • 嗨,您在 excel 中使用表格有什么问题吗?这会自动为您提供一个命名的动态范围。请看这个视频:youtube.com/watch?v=uLJEMnIT0zM 它解释了如何使用动态范围名称。希望有帮助!

标签: vba matlab excel


【解决方案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

【讨论】:

    【解决方案2】:

    在 VBA 中不能使用公式定义的命名范围是不正确的。如果您在执行此操作时遇到问题,那么您的公式可能有问题。

    引用范围的典型方法如下:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 2018-07-12
      • 1970-01-01
      • 2017-10-10
      相关资源
      最近更新 更多