2016-08-15 15 views
1

マクロを書くことを試みたことがあります(これはVBAなしでも可能ですが、より大きなマクロの部分であり、むしろVBAで行われました)。列Cの契約名と列Eの契約数のリストすべての契約名はグループ化されています(つまり、AppleはすべてAppleとなります)。基本的に、VBAは各契約ごとに正と負を控除します。各契約の高い行番号で始まる、何かを除去し、後処理(いずれかの行を削除するか、0に列Eの値を変更することによって、あるいはそれを低下させる)ように累積するVBA合計のアクティブセルの合計

-5 
-7 
3 
8 
4 
すなわち0

なりますすべての契約がグループ化されているように、その私はちょうどにアクティブセルから合計をチェックする必要があり、その後の契約のために、トップの契約のためにこれをやったら

は、1

に最後に4を変更しますトップは0ではなく、全ての量は陽性であった、またはすべての量は陰性であった、それが彼らのすべての任意のヘルプ

答えて

0

ないため、事前に

感謝を除去するであろう状況では特にその契約の

ですこれはあなたが始める? 私は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 
+0

「1」に最後のセルを変更厥素晴らしいおかげで、私はそれを持っている唯一の問題は、の絶対値を作ることができるはずのありますデータの中の任意の数値が大きくなり、データ上でテストされたデータでは、合計総計が負であるが最後のセルが正の値を持つ状況では、最終的な正の値を大きくするのではなく、最終的な負の値を小さくするか、必要に応じてゼロにするなどしてください。手伝ってくれてどうもありがとう! –

+0

アレックス、何でも可能です。それを後でもう一度見て、私が思いつくことができることを見て、正直なところ、ソルーションはおそらく最高のものではなく、問題を解決する方法は常にたくさんあります。いくつかのデータセットを投稿して、あなたが何をしたいのかを正確に示してくれますか?私がブレインストーミングコードを書くとき、私はそれを子供に説明しているかのように書き留めるのに役立ちます。細かい部分は無視しますが、できるだけ多くの時間を費やして、それぞれのステップで何が起こるべきかを説明します。それは、あなたが何をしているかを正確に識別するのに役立ちます。 Matt – user4467707

+0

ご協力いただきありがとうございます。例えば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に変更します。私はこれがこれをより明確にすることを望む!ありがとうございました –