1

私は同じ過ちを犯し続けていますが、それが何であるかわかりません。配列を扱う For ループを作成するたびに (通常、1 つの配列を読み取り、2 番目の配列に値を書き込もうとします)、最初の配列から最後の値を取得し、2 番目のすべてのスロットに書き込みます。配列。

これは、私が取り組んでいる最も簡単/最短のもののコピーです。A1:A10 から値を読み取り、B1:K1 に書き込むことになっています。

Sub Problem1()
    Dim a(1 To 10) As Single
    Dim b(1, 10) As Single
    Dim i As Integer



    For i = 1 To 10
        a(i) = Range("A" + CStr(i)).Value
    Next i

    For i = 1 To 10
        b(1, i) = a(i)
    Next i

    Range("B1:K1") = b(1, 10)

End Sub
4

5 に答える 5

4
Range("B1:K1") = b(1, 10)

これは単一の配列要素のみをコピーします。

次のことができます。

Range("B1:K1").Value = Application.WorksheetFunction _
    .Transpose(Range("A1:A10"))

残念ながら、元の値を配列に格納するには (私のアプローチを使用して) バリアントとして宣言する必要があります。

Sub Problem1()
    Dim a As Variant

    a = Range("A1:A10")

    Range("B1:K1") = Application.WorksheetFunction.Transpose(a)
End Sub

それでも両方の配列を利用したい場合:

Sub Problem1()
    Dim a As Variant
    Dim b(1 To 10) As Single
    Dim i As Integer

    a = Range("A1:A10")
    For i = 1 To 10
        b(i) = a(i, 1)
    Next i
    Range("B1:K1") = b
End Sub
于 2013-06-23T00:37:01.467 に答える
1
Sub Problem1()
    Dim a(1 To 10) As Single
    Dim b(1, 10) As Single
    Dim i As Integer

    For i = 1 To 10
        a(i) = Range("A" + CStr(i)).Value
    Next i

    For i = 1 To 10
        b(1, i) = a(i)
    Next i

    Range("B1:K1") = b()
End Sub
于 2014-12-11T10:48:56.447 に答える
0

あなたが望むもののために、あなたがそれを行うことができるより良い方法は次のとおりです:

Sub Problem1()

Dim a(1 To 10) As Single
Dim i As Integer

For i = 1 To 10
    a(i) = Range("A" + CStr(i)).Value
Next i

Range("B1:K1") = a
End Sub

現在の実装の問題点は、セルのグループの範囲全体に 1 つのシングルを割り当てたことです。配列の内容をループして、各セルに個別に出力することをお勧めします。しかし、上記の例で示したように、vba はこれをネイティブに処理します (セルの範囲に配列を出力します)。

于 2013-06-23T00:35:29.457 に答える
0

ステップをできるだけ明確にし、すべての値を 1 つのステップで読み書きして、出力が入力を変更しないようにします (セルのオーバーラップ)。フローは である必要があります[Read]->[Calc]->[Write]

Sub Problem1()
    Dim a() as Variant, b() as Variant, i as Integer

    'Get Values
    a = Range("A1").Resize(10,1).Value2

    'Transform the arrays in any way you need.
    'Make sure the intent is clear
    ReDim b(1 to 1, 1 to 10)
    For i=1 to 10
        b(1,i) = a(i,1)
    Next i

    'Set Values
    Range("B1").Resize(1,10).Value2 = b

End Sub
于 2013-06-24T00:40:24.333 に答える