0

私はもともと、2 次元バリアント配列を返す VBA 関数を持っていました。

Public Function SplitIntoCells(some_data As String) As Variant()
End Function

Formula 配列構文を使用して、別の vba 関数から呼び出しました。

Public Function MyWrapper() as Variant
    MyWrapper = SplitIntoCells("somestring")
End Function

Excel から、十分な大きさの範囲を選択してから、次のようにします。

=マイラッパー()

CTRL + SHIFT + ENTER が続くと、データはその範囲内のすべての個々のセルに適切に分割されます。

ただし、それを自動化するために、MyWrapper を次のように変更すると:

Public Function MyWrapper()
    ActiveSheet.Range("A1:E20").Select
    Selection.FormulaArray = SplitIntoCells("somestring")
End Function

上記は機能しません。Excel に何も表示されません。

私は何を間違っていますか?

アップデート:

テストのために、 MyWrapper() をわずかに変更すると、次のようになります。

Public Function MyWrapper()
    Dim variant_temp() as Variant
    variant_temp = SplitIntoCells("somestring")
    ActiveSheet.Range("A1:E20").Select
    Selection.FormulaArray = variant_temp
End Function

variant_temp は、SplitIntoCells から戻った後に 2 次元配列を持つことが予想されますが、その後の Selection.FormulaArray には、代入後もまだ何も含まれていません。私は盲目的に明らかな何かを見逃していると確信しています。

4

1 に答える 1

0

VBAユーザー定義関数は、呼び出し元のセルまたは範囲を変更できません。値を返すことしかできません。

于 2011-10-12T17:10:52.843 に答える