Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在VBA中,如何使用函数返回数组或写入单元格?_Arrays_Excel_Vba_Function_Range - Fatal编程技术网

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

Arrays 在VBA中,如何使用函数返回数组或写入单元格?,arrays,excel,vba,function,range,Arrays,Excel,Vba,Function,Range,使用这个非常简单的函数: Function WriteArray() as Variant Dim array(0 To 2) array(0) = "A" array(1) = "B" array(2) = "C" WriteArray = array End Function 我希望在Excel电子表格中看到整个数组的结果,但事实并非如此:我只得到第一个字符串。我知道有一个技巧可以在电子表格中显示整个数组(通过使用公式+F2+CTRL+SHIFT+ENTER选择一系列单元格),但

使用这个非常简单的函数:

Function WriteArray() as Variant
 Dim array(0 To 2)
 array(0) = "A"
 array(1) = "B"
 array(2) = "C"
 WriteArray = array
End Function
我希望在Excel电子表格中看到整个数组的结果,但事实并非如此:我只得到第一个字符串。我知道有一个技巧可以在电子表格中显示整个数组(通过使用公式+F2+CTRL+SHIFT+ENTER选择一系列单元格),但我更喜欢用VBA来处理这一切

我还尝试使用Application.Caller变量直接写入“Caller”范围,但代码中断

非常感谢你的帮助

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

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

也就是说,我希望看到代码中您实际尝试将其放入电子表格的部分,而不是构建数组的部分。那我就可以帮你了

不允许直接从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

如果要在调用单元之外进行写入,则需要实现某种形式的回调,这种回调将使用自动化来写入其他单元。这是更复杂的方式,更可能打破

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

详情如下:

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)

希望有帮助。

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

在您的示例中,第二个维度只是没有“使用”:


所以,不需要循环!简单而快速。

事实上,这不起作用,VBA代码在“Range”(“A”&i+StartRow)处中断。Value=MyArray(i)。。。这也是我的问题。这段代码在您的Excel上有效吗!?我使用Excel2003,它在Excel2003中运行得非常好。将开始代码中的每个“数组”更改为另一个非保留字的变量名,如AbcList或类似的名称。但它仍然会中断。。。我使用的代码就是这样的:函数WriteArray()作为变量Dim arr(0到2)arr(0)=“A”arr(1)=“B”arr(2)=“C”WriteArray=arr Dim StartRow,I作为I=0到UBound(arr)范围(“A”&I)的整数。Value=arr(I)下一个结束函数在“Range”(“A”&I)。Value=arr(I)”,它只是退出代码,即使没有抛出任何错误。。。对我来说没有意义:(我用这个代码编辑了我的问题,因为它在这里显示不正确:)不,你需要设置StartRow并将它添加到我。您的代码正在尝试写入A0,A0不存在,将抛出错误。
 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