8

文字列の配列を生成する VBA の関数があります。別の VBA 関数から呼び出された場合は正常に機能しますが、ワークシートから呼び出された場合は機能しません。

使用方法は次のとおりです。

  • A1:A3 を選択
  • 数式バー=Test()に書いてから叩いCtrl-Shift-Enterて配列関数にする
  • A1 にはA、A2 にはB、A3 には が含まれている必要があります。C

実際にこれを試してみるとA、配列の 3 つのセルすべてに配置されます。Testによって返されたデータを配列の異なるセルに取得するにはどうすればよいですか?


見たい人のために、ここに関数のコードがあります。この関数は、他の関数から呼び出されたときに正常に機能することに注意してください。

Function Test() As String()
    Dim a(1 To 3) As String
    a(1) = "A"
    a(2) = "B"
    a(3) = "C"
    Test = a
End Function
4

4 に答える 4

9

データを転置すると、関数は正常に機能します。これを行うには、Variant()代わりにString()次のものが必要です。

Function Test() As Variant()
    Dim a(1 To 3) As Variant
    a(1) = "A"
    a(2) = "B"
    a(3) = "C"
    Test = Application.Transpose(a)
End Function
于 2012-04-24T01:57:01.970 に答える
4

UDF から配列を返すことに関する Chip Pearson のアドバイスを確認することをお勧めします。

これが私の最初の応答です。これが不適切でないことを願っています。

于 2012-04-24T02:00:07.927 に答える
3

常に2次元配列で作業するのが最も簡単だと思います。そうすれば、転置などは必要ありません

Function Test() As String()
    Dim a(1 To 3, 1) As String
    a(1, 1) = "A"
    a(2, 1) = "B"
    a(3, 1) = "C"
    Test = a
End Function
于 2012-04-24T07:33:01.007 に答える
0

VBA から Excel への配列の最初の次元は、垂直ではなく水平です。の出力を表示するにはTest、配列関数=Test()を(A1:A3 ではなく) A1 :C1に配置します。

于 2012-04-24T01:57:00.923 に答える