Vba 如何在不知道有多少项的情况下输出excel数组

Vba 如何在不知道有多少项的情况下输出excel数组,vba,excel,array-formulas,Vba,Excel,Array Formulas,场景:我有一个连接到API(在本例中为Factset)并检索一些数据的代码。公式的数据输出是一个日期数组,其中可以包含任意数量的日期 问题:目前,我的代码将公式放入工作表并更新。问题是,要使excel数组正常工作(据我所知),我必须选择与输出项一样多的单元格,然后按“ctrl+shift+enter”。问题是,对于列表中的每个项目,我不知道将有多少个输出值,因此我无法预先选择该范围,因此我的输出只获取数组的第一个数据行 例如,输出应为: 15.01.2018 15.02.2018 15.03.2

场景:我有一个连接到API(在本例中为Factset)并检索一些数据的代码。公式的数据输出是一个日期数组,其中可以包含任意数量的日期

问题:目前,我的代码将公式放入工作表并更新。问题是,要使excel数组正常工作(据我所知),我必须选择与输出项一样多的单元格,然后按“ctrl+shift+enter”。问题是,对于列表中的每个项目,我不知道将有多少个输出值,因此我无法预先选择该范围,因此我的输出只获取数组的第一个数据行

例如,输出应为:

15.01.2018
15.02.2018
15.03.2018
15.04.2018
15.05.2018
但由于我不知道该项目将有5个日期,我当前的输出仅为:

15.01.2018
问题:是否有一种可能的方法可以做到这一点,而不需要输出中的最终数据行数?如果是,我怎么做

到目前为止的代码:

For i = 2 To numberofitems + 1
    If wb.Worksheets("Dates").Cells(1, i).Value <> "" Then
        wb.Worksheets("Call Prices").Cells(2, i).Formula = "=FDS(" & Cells(1, i).Address(0, 0) & ",""FI_(CALL,,DATE,,DATE)"")"
        Application.Goto ActiveWorkbook.Sheets("Dates").Cells(2, i)
        Application.SendKeys("^+{ENTER}")    
    End If
Next i
i=2到numberofitems+1的

如果wb.工作表(“日期”).单元格(1,i).Value为“”,则
wb.工作表(“调用价格”).Cells(2,i).Formula=“=FDS”(&Cells(1,i).Address(0,0)和“,”FI_(调用,日期,日期)”)
Application.Goto ActiveWorkbook.Sheets(“Dates”).单元格(2,i)
Application.SendKeys(“^+{ENTER}”)
如果结束
接下来我
Obs:我还阅读了其他一些带有.FormulaArray属性的帖子,但在没有预先选择范围的情况下无法理解如何使用它


Obs2:数据是从API(factset)检索的,因此它既不在工作表上,也不在VBA数组中。由于数据将来自API,我事先不知道它将包含多少项。

您可以将日期拉入一个数组,然后循环遍历数组中的每个项

Sub datesArray()
   vDates As Variant

   vDates = Sheets("Sheets1").Range("A1:A5")

   For i = 1 To UBound(vDates)
    'your code
   Next i
End Sub

您能否提供一个
日期
工作表的示例?如果数据在Excel中,则可以使用VBA方法查找包含数据的最后一个单元格。如果数据位于VBA中的数组中,您可以使用
UBound(array,1)-LBound(array,1)
查找数组的大小。@Zac在该表中,第一行中只有一系列标识符,它们被发送到API。当API返回数据时,数据存储在哪里?@QHarr B1中的值是“US09069NAF50”,问题是,我没有每个项目的初始日期,它来自API,因此我无法将其传递给数组。