10

Excel (2010) VBA を使用して、一定範囲のセル (値が再計算される) を配列にコピー (渡し) しようとしています。次に、その配列をそのすぐ下の新しいセル範囲に渡そうとしています。これを行った後、定数範囲の新しい値を配列に再度コピー (渡し) し、これらの新しい値を以前に渡した範囲のすぐ下の範囲に渡します。

私はこのコードがひどいことを知っています (VBA の配列は初めてです)。

Sub ARRAYER()

Dim anARRAY(5) As Variant

Number_of_Sims = 10

For i = 1 To Number_of_Sims
   anARRAY = Range("C4:G4")
   Range("C4").Select
   ActiveCell.Offset(Number_of_Sims, 0).Select
   ActiveCell = anARRAY
   Range("C4").Select
Next

End Sub

私は確かにあなたの助けに感謝します!

ありがとうございました。

謹んで、

ジョナサン

4

4 に答える 4

9

ここではいくつかの点で少しずれているので、次のことが役立つことを願っています。

まず、プロパティにアクセスするために範囲を選択する必要はありません。アドレスなどを指定するだけです。次に、範囲内の値を操作しない限り、実際にバリアントに設定する必要はありません。値を操作する場合は、範囲を定義するときに設定される配列の境界を省略できます。

Option Explicitモジュールの上部で変数宣言を強制するために使用することもお勧めします。

以下はあなたが求めていることを行います:

Sub ARRAYER()
    Dim Number_of_Sims As Integer, i As Integer

    Number_of_Sims = 10

    For i = 1 To Number_of_Sims
       'Do your calculation here to update C4 to G4
       Range(Cells(4 + i, "C"), Cells(4 + i, "G")).Value = Range("C4:G4").Value
    Next
End Sub

配列内の値を操作する場合は、次のようにします。

Sub ARRAYER()
    Dim Number_of_Sims As Integer, i As Integer
    Dim anARRAY as Variant

    Number_of_Sims = 10

    For i = 1 To Number_of_Sims
       'Do your calculation here to update C4 to G4
       anARRAY= Range("C4:G4").Value

       'You can loop through the array and manipulate it here

       Range(Cells(4 + i, "C"), Cells(4 + i, "G")).Value = anARRAY
    Next
End Sub
于 2013-02-10T04:14:13.037 に答える
3

配列は必要ありません。次のようなものを使用してください。

Sub ARRAYER()

    Dim Rng As Range
    Dim Number_of_Sims As Long
    Dim i As Long
    Number_of_Sims = 10

    Set Rng = Range("C4:G4")
    For i = 1 To Number_of_Sims
       Rng.Offset(i, 0).Value = Rng.Value
       Worksheets("Sheetname").Calculate   'replacing Sheetname with name of your sheet
    Next

End Sub
于 2013-02-10T04:17:03.923 に答える
2

同じデータをすべての行にコピーしているため、実際にループする必要はまったくありません。これを試して:

Sub ARRAYER()
    Dim Number_of_Sims As Long
    Dim rng As Range

    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False
    Number_of_Sims = 100000

    Set rng = Range("C4:G4")
    rng.Offset(1, 0).Resize(Number_of_Sims) = rng.Value

    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
End Sub
于 2013-02-10T09:00:57.130 に答える
0

あなたのコードを試してみると、配列を埋めようとしたときにエラーが発生しました。

このように配列を埋めることができます。

Sub Testing_Data()
Dim k As Long, S2 As Worksheet, VArray

Application.ScreenUpdating = False
Set S2 = ThisWorkbook.Sheets("Sheet1")
With S2
    VArray = .Range("A1:A" & .Cells(Rows.Count, "A").End(xlUp).Row)
End With
For k = 2 To UBound(VArray, 1)
    S2.Cells(k, "B") = VArray(k, 1) / 100
    S2.Cells(k, "C") = VArray(k, 1) * S2.Cells(k, "B")
Next

End Sub
于 2016-07-01T11:40:48.007 に答える