5

この非常に単純な関数を使用します。

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)」という行で中断されます。エクセルが壊れた?!

4

4 に答える 4

6

次のコードは、配列をセルの範囲に美しく書き込みます。

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

そうは言っても、配列を構築する場所ではなく、実際にスプレッドシートに取り込もうとしているコードの部分を見たいと思います。それなら私がお手伝いします!

于 2009-05-11T04:15:18.240 に答える
3

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

呼び出し元のセルの外に書き込みたい場合は、自動化を使用して他のセルに書き込む何らかの形式のコールバックを実装する必要があります。これははるかに複雑で、壊れる可能性がはるかに高くなります!

于 2009-05-14T08:41:39.083 に答える
1

その秘密は、2 次元配列を定義することです。配列の 2 つの次元は、データセットに対して定義する必要がある範囲です。配列の最初の次元は行オフセットで、2 番目の次元は列オフセットです。

あなたの例では、2番目の次元は「使用」されていません:

 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

したがって、ループは必要ありません。シンプルで高速。

于 2015-05-12T18:50:08.347 に答える