1

各列の値の合計を計算し、配列に格納する必要があります。列数は固定されていないことに注意してください。動的に変化します。これは私が完全に立ち往生しているところです。これは、私が書いている巨大な関数のほんの一部です。

以下のコードでは、合計している「列 H」は変数です。つまり、合計を計算する列の数は、Val(i) の値に基づいています。例: Val(0) = 10 の場合、列 H から列 Q までのすべての数値の合計を計算し、各列の合計を配列に格納する必要があります。sum(1) = 列 I の合計。等々。

私が立ち往生しているポイントは、列をインクリメントすることです。つまり、次の反復で「列H」を合計した後、「列I」の要素を合計する必要があります----> (Sum(i + k) = Application.WorksheetFunction.Sum (範囲("H2"))

私は以下のようなものを試しました:

Dim i, j, k, l, MaxVal As Integer
Dim objNewSheet As Worksheet
Dim Sum(0 To 1000) As Double

k = 0
For i = 0 To (MaxVal-1)
    Set objNewSheet = ActiveWorkbook.Sheets("Sheet" & (i+1))
    objNewSheet.Select
    For j = 0 To Val(i)
        Sum(i + k) = Application.WorksheetFunction.Sum(Range("H2"))
        k = k + j
    Next j
Next i
4

1 に答える 1

0

ティムが言及しているように、このResizeメソッドを使用して範囲のサイズを変更できます。

Dim rng as Range: Set rng = Range("H2")
Sum(i + k) = Application.WorksheetFunction.Sum(rng.Resize(1, j))

上記は、j列幅の新しい範囲を作成する必要があります。

Range定数が好きな方が扱いやすい(IMO)ため、変数を追加しますRange("H2")。を使用MsgBox rng.Resize(1,j).Addressして、新しい範囲のアドレスを表示できます。

考慮すべきその他のポイントを次に示します。

  • 本当に意図しない限り、変数を正しく宣言していませんi, j, k, l as Variant。あなたがすることができます:

    Dim i#, j#, k#, l#, MaxValue#(省略表記) または

    Dim i as Integer, j as Integer, k as Integer, l as Integer, MaxValue as Integer

    それ以外の場合、各変数の型を指定しない限り、変数は Variant になります。

  • 読みやすくするために、予約済みまたは半予約済みのキーワードやSum. その変数の名前をmySumorsumArrayまたは何か他のものに変更します。これは、将来のユーザーに、これが関数ではなく変数であることを明らかに示します。

  • 上記のコメントで、最初に配列変数の上限を 1000 に設定するのはちょっと面倒で、より大きな配列が必要になった場合は明らかに失敗することを述べました。これは当てはまらないかもしれませんが、それでも配列を次元化する方法は不格好です。実行時に本当に動的にする必要がある場合は、おそらく変数をコードの後半で使用することをお勧めDim mySum() as Doubleします。ReDimReDim Preserve

アップデート

これは簡単な例です。コードはスニペット/不完全であるため、使用できませんが、この例はこれがどのように機能するかを示しているはずです。

Option Base 1
Sub Test()
    Dim i As Integer
    Dim rng As Range
    Dim mySum() As Double

    '## The initial range ##'
    Set rng = Range("H2")

    '## Do an iterative loop ##'
    For i = 1 To 4

        '## Resize the range within the iteration ##'
        Set rng = rng.Resize(1, i)  '<-- change the 1 in this line to the number of rows in the column that needs to be summed'
        '## Ensure the array is properly dimensioned ##'
        ReDim Preserve mySum(i)
        '## Store the calculation in the array ##'
        mySum(i) = Application.WorksheetFunction.Sum(rng)

    Next

End Sub
于 2013-05-14T01:51:00.677 に答える