在VBA中,如何使用函数返回数组/或写入单元格?

使用这个非常简单的function:

Function WriteArray() as Variant Dim array(0 To 2) array(0) = "A" array(1) = "B" array(2) = "C" WriteArray = array End Function 

我期待在Excel电子表格中看到整个数组的结果,但事实并非如此:我只得到第一个string。 我知道有一种方法可以在电子表格中显示整个数组(通过使用公式+ F2 + CTRL + SHIFT + ENTERselect一系列单元格),但我更喜欢VBA来处理这一切。

我也尝试使用Application.Callervariables直接写入“调用者”范围,但代码中断。

非常感谢你的帮助!

编辑:这是我尝试使用的另一个代码:

 Function WriteArray() As Variant Dim arr(0 To 2) arr(0) = "A" arr(1) = "B" arr(2) = "C" WriteArray = arr Dim StartRow, i As Integer For i = 0 To UBound(arr) Range("A" & i).Value = arr(i) Next End Function 

它在“Range(”A“&i).Value = arr(i)”这一行中断开。 我的Excel坏了吗?

下面的代码精美地将数组写入一个单元格区域:

 Function WriteArray() As Variant Dim AbcList(0 To 2) as Variant AbcList(0) = "A" AbcList(1) = "B" AbcList(2) = "C" WriteArray = AbcList End Function Function WriteArrayToSpreadsheet() Dim MyArray As Variant MyArray = WriteArray() Dim StartRow, i As Integer StartRow = 1 For i = 0 To UBound(MyArray) Range("A" & i + StartRow).Value = MyArray(i) Next End Function 

话虽如此,我想看看你实际上试图把它放到电子表格上的那部分代码,而不是你build立数组的地方。 那我可以帮你了

您不允许直接从Excel中的工作表函数写入非调用方单元格。

如果你想使用数组函数(使用Shift-Ctrl-Enter),你需要将你的代码改为:

 Function WriteArray() As Variant Dim arr(0 To 2, 0 To 1) arr(0, 0) = "A" arr(1, 0) = "B" arr(2, 0) = "C" WriteArray = arr End Function 

如果你想写在调用单元之外,你需要实现某种forms的callback,这种callback将使用自动化来写入其他单元。 这样更复杂,更容易中断!

秘密是定义一个二维数组。 数组的两个维度就是需要为数据集定义的范围。 第一个数组维度是行偏移量,第二个维度是列偏移量。

在你的例子中,第二个维度只是不被“使用”:

  Sub Ente() Dim myArray(0 To 3, 0) As String myArray(0, 0) = "A" myArray(1, 0) = "B" myArray(2, 0) = "C" Range("B7:B" & UBound(myArray) + 6) = myArray End Sub 

所以,没有必要的循环! 简单而快速。

到目前为止,我所做的最好的解决方法是创build一个程序,获取您的范围参考和您的数组,并将其作为一个起点来显示您的数据水平或垂直…

如下:

 Sub LoadArray(ByRef oRange, ByRef vArray) Dim I For I = 0 To UBound(vArray) oRange.Offset(I, 0).Value = vArray(I) Next End Sub 'How to call: Dim anyArray anyArray = Array(1,2,3) Call LoadArray(Range("anyRange"), anyArray) 

希望能帮助到你。