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