1

作業プロジェクトの要件は、特定の数のカテゴリについて、1 時間ごとの値を日ごとに合計することです。これらの値は、スプレッドシートの 1 つの長い列に格納されます。値を取得するために、24 行ごとに新しい日を合計します。これは、スプレッドシートをループして、各ループの値を 24 ずつ増やすことで実現できます。

例えば:

first = 1
second = 24
i = 0
While Worksheets("Data").Range("A1").offset(i, 0) <> ""
    Worksheets("Data").Range("C1").offset(i, 0).Formula = "=SUM(B" & first & ":B" & second & ")")
    first = first + 24
    second = second + 24
Wend 

列 A はカテゴリ、列 B は時間別データです。列 B は、列 A * 24 の長さになります。

これにより、次のような結果が得られます...

=SUM(B1:B24)
=SUM(B25:B48)
=SUM(B49:B72)

.. 等々。

これはうまく機能しますが、非常に遅いです。私がやりたいのは、範囲全体に AutoFill を使用することですが、毎回値を 25 ずつインクリメントするような方法でそれを記述する方法がわかりません。これまでのところ、値ごとに 1 ずつインクリメントすることしかできませんでした。

=SUM(B1:B24)

になる

=SUM(B2:B25)

可変数 (この場合は 24) ずつインクリメントする範囲で AutoFill を使用する方法はありますか?

前もって感謝します。

4

2 に答える 2

1

現在のアプローチに対する唯一の不満がその速度である場合は、数式を挿入する間、計算を一時停止することで大幅に高速化できる可能性があります。

Application.Calculation = xlCalculationManual
'do your thing
Application.Calculation = xlCalculationAutomatic
于 2011-07-14T20:09:00.147 に答える
0

VBAを使用するかどうかにかかわらず、それを行う方法はたくさんあります。

Excel のみを使用したソリューションを紹介しますが、他の列の使用を避けるために VBA に移行することができます (サポート列を使用せずにそれを行う方法が必要だと思います。コミュニティの他の誰かが最終的にその方法を覚えているかもしれません)。

さて、ここでのトリックはINDIRECT式を使用することです。

合計式を列 C に適用していると仮定します。

列 D と E には、行インデックスを格納します。次に、次のようになります。

|D      |E      |
|-------|-------|
|1      |24     |
|=D1+24 |=E1+24 |
|=D2+24 |=E2+24 |

ここで、列 C で、直接の値で Sum を使用する代わりに、次を使用します。

=SUM(INDIRECT("B"&D1):INDIRECT("B"&E1))
=SUM(INDIRECT("B"&D2):INDIRECT("B"&E2))
=SUM(INDIRECT("B"&D3):INDIRECT("B"&E3))

このコードは、列 C、D、および E を一緒にドラッグする限り、必要なだけ下にドラッグできます。

繰り返しになりますが、VBA を使用してより洗練された方法で行うこともできます (そして、Excel のみを使用してよりスマートな方法で行うこともできます) が、それが私の頭に浮かんだ方法です。とにかく、単純な VBA の実装に関するここで見た質問のほとんどは、個人的な使用のためのものでした。したがって、他の列を使用しても問題はありません。

VBA を使用したい (または必要とする) 場合は、コードの下書きを作成してください。

それが役に立てば幸い。

于 2011-07-14T21:30:37.003 に答える