2017-05-11 11 views
0

異なるシートの内容に基づいて動的配列を作成する関数があります。各配列のサイズは異なります。私は、各配列の内容を関数が呼び出されたワークシートに貼り付けたいと思います。各配列のサイズが異なると、転置関数を使用できないようです。助言がありますか?ここで不明なサイズの配列をブック(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 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 

答えて

2

あなたはリサイズ、1列目の結果を得るためのようなものを使用します。

ys.Range("G1").Resize(Ubound(a)+1).Value = Application.Transpose(a) 

あなたはトランスを使用しない場合あなたはaを繰り返し処理する必要があります。

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

編集はちょうどあなたがおそらくワークシートからこれを呼び出している実現します。これは、ワークシートによって呼び出される関数は他のセルの値に影響を与えることはできませんシートに戻って貼り付けを行うサブから呼び出す必要があります。

+0

完璧、ありがとうございます。同じ行に値をリストしたいが、列を変更したいとします(G1、H1など)。forループをどのように変更しますか? – Caerus

+0

最初のTransposeを削除し、2番目のオフセットで 'Offset(、i)'を使います。 –

+0

ああ、最初に 'Resize(Ubound(a)+1)'を 'Resize(Ubound(a)+1)'に変更する必要があります。 –

関連する問題