ないため、事前に
感謝を除去するであろう状況では特にその契約の
ですこれはあなたが始める? 私はA1から始まる一連の乱数を使ってA5までサンプル数を設定していました。 -5、-7,3,8,4結果は
Sub net_fix()
Dim top As Integer
Dim bottom As Long
Dim running_t As Integer
Dim eval As Long
Dim net As Long
Dim rng As Range
running_t = 0
net = 0
top = 1
bottom = Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row 'last row with data (change to fit your application)
Set rng = Worksheets(1).Range(Cells(top, 1), Cells(bottom, 1))
'check for all negative or positive numbers
eval = 0
For Each cell In rng
If cell.Value < 0 Then eval = eval + 1
Next
If eval = bottom + 1 - top Then 'all cells were negative so change value to 0
With rng
.Value = 0
End With
End If
eval = 0
For Each cell In rng
If cell.Value > 0 Then eval = eval + 1
Next
If eval = bottom + 1 - top Then 'all cells were positive
With rng
.Value = 0
End With
End If
net = WorksheetFunction.Sum(rng)
For i = bottom To top Step -1 'fix the cells from bottom to top until the net = 0
If Not net = 0 Then
last_t = Worksheets(1).Cells(i, 1)
If net > last_t Then Worksheets(1).Cells(i, 1) = 0: net = WorksheetFunction.Sum(rng)
If net < last_t Then Worksheets(1).Cells(i, 1) = last_t - net: net = WorksheetFunction.Sum(rng)
End If
Next
End Sub
「1」に最後のセルを変更厥素晴らしいおかげで、私はそれを持っている唯一の問題は、の絶対値を作ることができるはずのありますデータの中の任意の数値が大きくなり、データ上でテストされたデータでは、合計総計が負であるが最後のセルが正の値を持つ状況では、最終的な正の値を大きくするのではなく、最終的な負の値を小さくするか、必要に応じてゼロにするなどしてください。手伝ってくれてどうもありがとう! –
アレックス、何でも可能です。それを後でもう一度見て、私が思いつくことができることを見て、正直なところ、ソルーションはおそらく最高のものではなく、問題を解決する方法は常にたくさんあります。いくつかのデータセットを投稿して、あなたが何をしたいのかを正確に示してくれますか?私がブレインストーミングコードを書くとき、私はそれを子供に説明しているかのように書き留めるのに役立ちます。細かい部分は無視しますが、できるだけ多くの時間を費やして、それぞれのステップで何が起こるべきかを説明します。それは、あなたが何をしているかを正確に識別するのに役立ちます。 Matt – user4467707
ご協力いただきありがとうございます。例えば3、-2、7、4の場合、4を0、7を0、3を2に変更します。私が得ようとしているのは、各数値の絶対値が数値が0に変更された後も、合計が0でない場合は、次の数値と同じになり、合計は0になりません。別の例では、6、4、8は3つの数値をすべて0に変更しますもう1つ、-4、-3、-2,5ここでは-2を0に、-3を-1に変更します。私はこれがこれをより明確にすることを望む!ありがとうございました –