Arrays 在Excel中解析从RTD返回的数组

Arrays 在Excel中解析从RTD返回的数组,arrays,vba,excel,rtd,Arrays,Vba,Excel,Rtd,我在Excel工作表中使用RTD公式接收单元格A1中的项目列表: =RTD("josh.rtd",,"Letters",,"Lower") 单元格A1中返回的列表位于花括号中,并由分号分隔。基本上,它是一个一维的行数组,如下所示 {“a”;“b”;“c”;“d”} 如果复制该结果,并将值粘贴到A2中,然后复制A2,从电子表格中的列中选择四个单元格,例如A3:A6,并在公式窗口中键入“=”,然后粘贴结果 ={"a";

我在Excel工作表中使用RTD公式接收单元格A1中的项目列表:

=RTD("josh.rtd",,"Letters",,"Lower")
单元格A1中返回的列表位于花括号中,并由分号分隔。基本上,它是一个一维的行数组,如下所示

{“a”;“b”;“c”;“d”}

如果复制该结果,并将值粘贴到A2中,然后复制A2,从电子表格中的列中选择四个单元格,例如A3:A6,并在公式窗口中键入“=”,然后粘贴结果

={"a";"b";"c";"d"}
我可以按住ctrl+shift+enter键,并用数组元素填充每个单元格,如下所示:

a

b

c

d

我的问题是:是否有一个公式可以用来解析原始RTD公式结果?我想用该数组的元素填充组合框控件。我希望能够在单元格公式中或通过VBA执行此操作。

文档建议
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
文档建议
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

对于公式,您可以使用
INDEX
函数。谢谢@Ron,我已经看过INDEX,但我不知道在这种情况下如何使用INDEX函数。我只能找到索引用于引用单元格引用的示例。此时,整个数组存在于单元格A1中。如果我将单元格A1命名为“字母”,那么在A2中,如果我能输入=字母[2],得到“b”(如果索引以0为基数,则为“c”),那就太好了。John的答案是90%。索引函数的数组参数不需要是一个范围。您可以将
RTD
公式作为
array
参数,然后查看不同的行(或列,具体取决于RTD的返回方式)。类似于
索引(RTD(…),2,1)
的内容应该返回数组中的第二个元素。如果它返回一个看起来像数组的字符串,那么这将不起作用。@RonRosenfeld,非常好,谢谢。使用下面的John函数,这是有效的:
=INDEX(ParseArray(A1),1,2)
对于公式,您可以使用
INDEX
函数。谢谢@Ron,我已经看过INDEX,但我不知道在这种情况下如何使用INDEX函数。我只能找到索引用于引用单元格引用的示例。此时,整个数组存在于单元格A1中。如果我将单元格A1命名为“字母”,那么在A2中,如果我能输入=字母[2],得到“b”(如果索引以0为基数,则为“c”),那就太好了。John的答案是90%。索引函数的数组参数不需要是一个范围。您可以将
RTD
公式作为
array
参数,然后查看不同的行(或列,具体取决于RTD的返回方式)。类似于
索引(RTD(…),2,1)
的内容应该返回数组中的第二个元素。如果它返回一个看起来像数组的字符串,那么这将不起作用。@RonRosenfeld,非常好,谢谢。使用下面的John函数,这是可行的:
=INDEX(ParseArray(A1),1,2)
您为行而不是为列拆分。像你提到的文章那样计算它会更简单。@ThomasInzina有很多优点,但OP特别指出,在他们的应用程序中,它是一个一维数组<代码>求值会把它变成一个恼人的伪二维数组,这对某些应用程序来说不太方便。谢谢,@JohnColeman!这太棒了。我的下一步是用数组的元素填充一个组合框。我希望能够计数数组的元素,通过索引返回元素,以及通过VBA执行其他操作。除了得到答案之外,您还推荐其他文档来了解更多有关在VBA中使用数组的信息吗?
=INDEX(ParseArray(A1),1,2)
给了我第二个元素,
=COUNTA(ParseArray(A1))
给了我元素的数量。我肯定有教程/youtube视频,但如果你喜欢这本书,我推荐约翰·沃肯巴赫的《傻瓜Excel VBA编程》。我第一次学习VBA是通过那本书的早期版本。他的网站也是一个很好的信息来源(),你可以按行分割,但不能按列分割。像你提到的文章那样计算它会更简单。@ThomasInzina有很多优点,但OP特别指出,在他们的应用程序中,它是一个一维数组<代码>求值会把它变成一个恼人的伪二维数组,这对某些应用程序来说不太方便。谢谢,@JohnColeman!这太棒了。我的下一步是用数组的元素填充一个组合框。我希望能够计数数组的元素,通过索引返回元素,以及通过VBA执行其他操作。除了得到答案之外,您还推荐其他文档来了解更多有关在VBA中使用数组的信息吗?
=INDEX(ParseArray(A1),1,2)
给了我第二个元素,
=COUNTA(ParseArray(A1))
给了我元素的数量。我肯定有教程/youtube视频,但如果你喜欢这本书,我推荐约翰·沃肯巴赫的《傻瓜Excel VBA编程》。我第一次学习VBA是通过那本书的早期版本。他的网站也是一个很好的信息来源()