2016-10-05 4 views
0

Я использую формулу РДТ в листе Excel, чтобы получить список элементов в ячейке A1:Разобрать массив вернулся из ППУ в Excel

=RTD("josh.rtd",,"Letters",,"Lower") 

Возвращаемый список в ячейке A1 находится в фигурных скобках и разделителями по полуколонам. В принципе, это один одномерный массив строк и выглядит следующим образом

{ «а», «б»; «с», «d»}

Если скопировать этот результат, и паста значения в А2, а затем скопировать A2, выберите четыре ячейки из столбца в таблице, например, A3: A6, и введите «=» в формуле окно, и вставить результат,

={"a";"b";"c";"d"} 

могу удерживайте ctrl + Смещение + введите и заполнения каждой из этих клеток с элементом массива, например так:

б

с

д

Мой вопрос это: есть ли формула, которую я могу использовать для анализа этого исходного результата формулы RTD? Я хочу заполнить элемент управления со списком с элементами этого массива. Мне бы хотелось, чтобы это можно было сделать либо в формуле ячейки, либо через VBA.

+0

Для формулы вы можете использовать функцию 'INDEX'. –

+0

Спасибо @Ron, я посмотрел INDEX, но я не вижу, как функция INDEX используется в этом случае. Я могу найти только примеры использования INDEX для ссылки на ссылку на ячейку. На данный момент весь массив существует в ячейке A1. Если я назвал буквы «A1» ячейки A1, тогда в A2 было бы здорово, если бы я мог бы положить = буквы [2] и получить «b» (или «c», если индекс является базовым 0). Ответ от Джона дает мне 90%. – Josh

+0

Нет требования, чтобы аргумент массива для функции Index был диапазоном. Вы поместите формулу «RTD» в качестве аргумента «array», а затем посмотрите на разные строки (или столбцы в зависимости от того, как возвращается RTD). Что-то вроде 'INDEX (RTD (...), 2,1)' должно возвращать второй элемент в массиве. Если он возвращает строку, которая выглядит как массив, это не сработает. –

ответ

1

This документация предполагает, что RTD возвращает строку. Если это так, следующее должно быть способно проанализировать его, возвращая результат в виде массива:

Function ParseArray(ArrayString As String) As Variant 
    Dim s As String 
    s = Replace(ArrayString, "{", "") 
    s = Replace(s, "}", "") 
    s = Replace(s, """", "") 
    ParseArray = Split(s, ";") 
End Function 
+0

Вы разделяете строки, но не для столбцов. Было бы проще оценить его, как в статье, о которой вы говорили. –

+0

@ThomasInzina Хорошие моменты, но OP специально сказал, что в их применении это был 1-мерный массив. 'Evaluate' превратит его в один из тех раздражающих псевдо-2-мерных массивов, которые не были бы столь же удобны для некоторых приложений. –

+0

Теперь я вижу ясно. –