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

时间:2018-07-18 13:30:03

标签: excel vba excel-vba array-formulas

场景:我有一个代码可以连接到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

Obs::我还阅读了一些其他有关.FormulaArray属性的文章,但是如果不预先选择范围,则无法理解如何使用它。

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

1 个答案:

答案 0 :(得分:0)

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

Sub datesArray()
   vDates As Variant

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

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