0

数値の列がある場合、合計が特定のしきい値に達するまで値を合計してから、合計をリセットして続行することはできますか?例えば

Val Sum
103 
52  155
47  
60  
103 210
100 
76  176
163 163
169 169
87  
103 190
84  
31  
59  174
87  
49  
67  203

これは、値が150を超えるまで数値のグループを合計し、その後、カウンターをリセットします。

4

3 に答える 3

2

実際の回答よりも概念実証のために、またはこれを改善できる場合に投稿します(Issunにもアイデアがあるかもしれません)。

ここにあります: Val が でcolumn A、Sum が でcolumn B、Titles が であると仮定しますrow 1
ではcolumn C、合計した「最後の」セルがどれかを示す数式を設定します > セル に次のように入力しますC3

{=MAX(IF($B$2:B2=0;0;ROW($B$2:B2)))}

これは配列数式です。 で検証する必要がありますCtrlShiftEnter

cellB3には、最初の値 (例では 155) を入力する必要があります。申し訳ありませんが、適切な回避策が見つかりませんでした。
セルB4に、次のように入力します。

=IF(SUM($A$1:A4)-SUM(INDIRECT("$B$1:"&ADDRESS(C4;2)))>150;SUM($A$1:A4)-SUM(INDIRECT("$B$1:"&ADDRESS(C4;2)));0)

次に、数式を値の最後までドラッグ アンド ドロップします。

[編集]実際には、セル内の単一の式にすべてを入れることができますB2:

{=IF(SUM($A$1:A2)-SUM(INDIRECT("$B$1:"&ADDRESS(MAX(IF($B$1:B1=0;0;ROW($B$1:B1)));2)))>150;SUM($A$1:A2)-SUM(INDIRECT("$B$1:"&ADDRESS(MAX(IF($B$1:B1=0;0;ROW($B$1:B1)));2)));0)}

値の最後までドラッグ アンド ドロップします。もうまくいくようです。

于 2011-08-04T11:45:57.497 に答える
1

これがVBAの解決策です(申し訳ありませんが、フォーラムが必要でした)。明らかに、範囲を調整して、必要なものにすることができます。データ型としてLONGを使用したことに注意してください(エラーを避けるためにlongにキャストしています)が、浮動小数点数がある場合はDOUBLEを使用する必要があります。

Sub SumIt()

Dim cell As range
Dim currentCount As Long

For Each cell In range("A2:A100")
    currentCount = currentCount + CLng(cell.Value)
    If currentCount > 150 Then
        cell.Offset(0, 1).Value = currentCount
        currentCount = 0
    End If
Next

End Sub

仕組み:範囲内の各セルをループし、currentCountという変数に値を追加します。次に、150を超えているかどうかを確認します。そうである場合は、currentCountをB列(同じ行)に貼り付け、カウントをリセットして次のセルに移動します。単純!

于 2011-08-04T09:56:38.850 に答える