Arrays 将未知大小的数组粘贴到工作簿(VBA)上的某个位置

Arrays 将未知大小的数组粘贴到工作簿(VBA)上的某个位置,arrays,vba,Arrays,Vba,我有一个函数,可以根据不同工作表的内容创建动态数组-每个数组的大小不同。我想将每个数组的内容粘贴到调用函数的工作表中。鉴于每个数组的大小不同,我似乎无法使用转置函数。有什么建议吗 以下是创建阵列的函数: Function FindConstituents(ByRef ys As Worksheet) As String() Dim a() As String Dim size As Integer Dim i As Integer Dim j As Integer size = 0 Dim r

我有一个函数,可以根据不同工作表的内容创建动态数组-每个数组的大小不同。我想将每个数组的内容粘贴到调用函数的工作表中。鉴于每个数组的大小不同,我似乎无法使用转置函数。有什么建议吗

以下是创建阵列的函数:

Function FindConstituents(ByRef ys As Worksheet) As String()
Dim a() As String
Dim size As Integer
Dim i As Integer
Dim j As Integer

size = 0
Dim row As Integer
row = 2
ReDim Preserve a(size)
While ys.Cells(row, 4) <> ""
    If IsInTable(ys.Cells(row, 4), ys, 2) Then
    ReDim Preserve a(size)
    a(size) = ys.Cells(row, 4)
    size = size + 1
    End If
    row = row + 1
Wend
size = size + 1

<<Code to paste contents of a() onto a place in the worksheet>>

FindConstituents = a
End Function
函数findConstructions(ByRef ys作为工作表)作为字符串()
将()变暗为字符串
将大小设置为整数
作为整数的Dim i
作为整数的Dim j
大小=0
将行设置为整数
行=2
重拨保留a(大小)
而ys.单元格(第4行)“”
如果不可见(ys.单元格(第4行),ys,2),则
重拨保留a(大小)
a(大小)=ys.单元格(第4行)
尺寸=尺寸+1
如果结束
行=行+1
温德
尺寸=尺寸+1
<将()的内容粘贴到工作表中某个位置的代码>
FindConstructions=a
端函数

您可以使用Resize,类似于在一列中获得结果:

ys.Range("G1").Resize(Ubound(a)+1).Value = Application.Transpose(a)
如果您不想使用转置,那么您将需要遍历

Dim i as long
For i = Lbound(a) to Ubound(a)
    ys.Range("G1").Offset(i).Value = a(i)
Next i


Edit刚刚意识到您可能正在从工作表中调用它。这需要从粘贴回工作表的子对象调用。工作表调用的函数不能影响其他单元格的值。

您可以使用“调整大小”,类似于在一列中获得结果:

ys.Range("G1").Resize(Ubound(a)+1).Value = Application.Transpose(a)
如果您不想使用转置,那么您将需要遍历

Dim i as long
For i = Lbound(a) to Ubound(a)
    ys.Range("G1").Offset(i).Value = a(i)
Next i


Edit刚刚意识到您可能正在从工作表中调用它。这需要从粘贴回工作表的sub调用工作表调用的函数不能影响其他单元格的值。

非常好,谢谢。假设我想开始在同一行中列出值,但更改列:G1、H1等,您将如何修改for循环?在第一行中删除转置,在第二行中使用
Offset(,I)
。哦,在第一行中,您还需要将
Resize(Ubound(a)+1)
更改为
Resize(,Ubound(a)+1)
完美,谢谢。假设我想开始在同一行中列出值,但更改列:G1、H1等,您将如何修改for循环?在第一行中删除转置,在第二行中使用
Offset(,I)
。哦,在第一行中,您还需要将
Resize(Ubound(a)+1)
更改为
Resize(,Ubound(a)+1)