2017-02-20 3 views
0

私は基本的に範囲をループし、4つの合計のうちの1つにセルの値を加えることを試みています(どちらか低い方)。一連のIFのものですが、私はそれが過度に複雑で混乱しやすいと信じています。VBAで最小可変合計ループを作る方法

私は基本的にセルの範囲を通ってS1、S2、S3及びS4、Iループを有しており者が想定する:

S1 = 1 
S2 = 3 
S3 = 2 
S4 = 4 

Iは、セルの値をチェックして用いて変数に追加するコードが必要最低の合計、すなわち:この場合の

min(S1,S2,S3,S4) = min + cell value 

:事前にS1 = S1 + cellvalue

ありがとう! :)

答えて

0

関数を使って変数をループするのは面倒です。 IFシリーズはコードの数行を使用することができますが、パフォーマンス面では無視できます。

Sub Test() 
Dim S1 as Long, S2 as Long, S3 as Long, S4 as Long 
Dim cell as Range 

S1 = 1 
S2 = 2 
S3 = 3 
S4 = 4 

For Each cell in Range("A:A")  

If S4 < S3 And S4 < S2 And S4 < S1 Then 
    S4 = S4 + cell.Value 
ElseIf S3 < S4 And S3 < S2 And S3 < S1 Then 
    S3 = S3 + cell.Value 
ElseIf S2 < S4 And S2 < S3 And S2 < S1 Then 
    S2 = S2 + cell.Value 
ElseIf S1 < S4 And S1 < S3 And S1 < S2 Then 
    S1 = S1 + cell.Value 
End If 

Next cell  

End Sub 
+0

これがうまく働いた1または複数の和が同じ値を持っているし、すべての最小値のとき、ちょうど必要との調整。ありがとう! – Eugene

0

はここにあなたのデータはセルA1に位置していると仮定すると、最小値を見つけるの簡単な方法です:A5あなたは答えを得ているとして、この1つは任意のIFSを使用していない

Sub MinMacro() 


Dim rng As Range 
Set rng = Range("A1:A5") 

Dim value As Integer 
value = Application.Min(rng) 

msgbox value 

End Sub 
1

Sub foo() 
Dim rng As Range, cel As Range 
Dim inptRng As Range 
Dim t As Long 
Set rng = ActiveSheet.Range("S1:S4") 
Set inptRng = ActiveSheet.Range("A1:A10") 
For Each cel In inptRng 
    With Application.WorksheetFunction 
     t = .Match(.Min(rng), rng, 0) 
     rng(t) = rng(t) + cel 
    End With 
Next cel 

End Sub 
0

はそれをテストすることはできませんが、私はこのような何かが動作するはずだと思う:

[s1:s4] = [s1:s4+(s1:s4=min(s1:s4))*cellvalue] 

または式の結果のための一時的な範囲で別々のステップで:

Range("z1:z4").Formula = "s1+(s1=min(s$1:s$4))*cellvalue" 
Range("s1:s4").Value2 = Range("z1:z4").Value2 
Range("z1:z4").ClearContents 
関連する問題