2016-08-09 5 views
0

В Excel, У меня есть столбец следующим образом, как часть шаблона рабочей книги:Доступ к динамической Именованные диапазоны в VBA

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».

+1

привет, у вас есть какие-либо проблемы с использованием таблиц в Excel? что дает вам автоматически именованный динамический диапазон. PLS см. это видео: https://www.youtube.com/watch?v=uLJEMnIT0zM объясняет, как использовать динамическое имя диапазона. Надеюсь, поможет! – Hadi

ответ

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 
+0

Большое вам спасибо, что сработало отлично. – beeba

+0

приветствуются – user3598756

1

Неверно, что именованные диапазоны, определенные формулой, не могут использоваться в VBA. Если у вас возникла проблема с этим, у вас может возникнуть проблема с вашей формулой.

Типичный способ для ссылки на диапазон будет что-то вроде:

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