数値の列がある場合、合計が特定のしきい値に達するまで値を合計してから、合計をリセットして続行することはできますか?例えば
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を超えるまで数値のグループを合計し、その後、カウンターをリセットします。
数値の列がある場合、合計が特定のしきい値に達するまで値を合計してから、合計をリセットして続行することはできますか?例えば
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を超えるまで数値のグループを合計し、その後、カウンターをリセットします。
実際の回答よりも概念実証のために、またはこれを改善できる場合に投稿します(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)}
値の最後までドラッグ アンド ドロップします。もうまくいくようです。
これが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列(同じ行)に貼り付け、カウントをリセットして次のセルに移動します。単純!