2016-04-12 10 views
0

私は[数量]フィールドの値に最も近い8 [qty]フィールドの値を見つけるために以下のコードを使用しています。 [qty]フィールドの値が昇順の値であれば、コードは必要な機能を果たします。例えば。 10,20,30,40,50,60,70,80次のコードを昇順と降順の両方の数字で使用するにはどうすればいいですか

値が降順であるか、または混合されている場合、コードは失敗します。 80,70,60,50,40,30,20,10または10,30,50,40,70,20,80など

誰もがより良い方法

If Me![Make Quantity] <= Me![qty1] Then 
    materialprice = Me![raw1] 

ElseIf Me![Make Quantity] <= Me![qty2] And Me![Make Quantity] > Me![qty1] Then 
    materialprice = Me![raw1] 

ElseIf Me![Make Quantity] <= Me![qty3] And Me![Make Quantity] > Me![qty2] Then 
    materialprice = Me![raw2] 

ElseIf Me![Make Quantity] <= Me![qty4] And Me![Make Quantity] > Me![qty3] Then 
    materialprice = Me![raw3] 

ElseIf Me![Make Quantity] <= Me![qty5] And Me![Make Quantity] > Me![qty4] Then 
    materialprice = Me![raw4] 

ElseIf Me![Make Quantity] <= Me![qty6] And Me![Make Quantity] > Me![qty5] Then 
    materialprice = Me![raw5] 

ElseIf Me![Make Quantity] <= Me![qty7] And Me![Make Quantity] > Me![qty6] Then 
    materialprice = Me![raw6] 

ElseIf Me![Make Quantity] <= Me![qty8] And Me![Make Quantity] > Me![qty7] Then 
    materialprice = Me![raw7] 

Else 
    materialprice = Me![raw8] 

End If 
でこれを処理する方法を提案することができます
+0

要素の順序を保つ必要がありますか? – Sorceri

+0

どういう意味ですか?あなたが[qty1]とそれに続く必要があるかどうかを尋ねているなら、[qty1]と[raw1]は一緒にいなければなりません。 – superllanboy

+0

あなたは8つの量から 'ベストフィット'を探していますか?つまり、完全一致を見つけたり、最小数量が「Make Quantity」を超えている場合は、これらのフィールドはすべてフォーム上にあるように見えますか? –

答えて

2

UPDATED! QTY <が最も低い場合、デフォルトは最低になるようにコードを変更しました。 >最高の場合、最高のものを使用します。

私は一緒に投げたいくつかのコードは...私はあなたのデータを持っていないので、私は(フィールド名を使用して)8組のテキストボックスにテストデータを読み込んだ。 「Make Quantity」テキストボックスに「CHANGE」イベントを使用してコードを呼び出すことに注意してください。あなたは好きなように実行することができます。

問題が解決したら、Debug文とMsgBoxをコメントアウトしてください。

Option Compare Database 
Option Explicit 

Private Sub Form_Load() 
Dim i As Integer 
Dim MakeQuantity As Integer 
Dim materialprice As Double 

Me.qty1 = 30: Me.qty2 = 20: Me.qty3 = 70: Me.qty4 = 50: Me.qty5 = 10: Me.qty6 = 60: Me.qty7 = 80: Me.qty8 = 70 
Me.raw1 = 3.3: Me.raw2 = 2.2: Me.raw3 = 7.7: Me.raw4 = 5.5: Me.raw5 = 1.1: Me.raw6 = 6.6: Me.raw7 = 8.8: Me.raw8 = 7.7 

End Sub 


    Private Sub Make_Quantity_AfterUpdate() 
Dim i  As Integer 
Dim iDiff As Integer 
Dim iLow As Integer 
Dim iMatch As Integer 
Dim iHigh As Integer 
Dim dPriceL As Double 
Dim dPriceH As Double 
Dim dPriceM As Double 
Dim iQtyL As Integer 
Dim iQtyH As Integer 

    iLow = 30000 
    iHigh = 0 
    iMatch = 10 
    Debug.Print "Find Qty of: " & Me.[Make Quantity] 
For i = 1 To 8 
    If Int(Me("qty" & i)) <= iLow Then 
     iLow = Int(Me("qty" & i)) 
     dPriceL = Me("raw" & i) 
     iQtyL = Int(Me("qty" & i)) 
    End If 
    If Int(Me("qty" & i)) >= iHigh Then 
     iHigh = Int(Me("qty" & i)) 
     dPriceH = Me("raw" & i) 
     iQtyH = Int(Me("qty" & i)) 
    End If 

    iDiff = Abs(Me.[Make Quantity] - Me("qty" & i)) 
    If Int(Me("qty" & i)) <= Int(Me.[Make Quantity]) Then 
     If iDiff <= iMatch Then 
      iMatch = iDiff 
      dPriceM = Me("raw" & i) 
     End If 
    End If 
    Debug.Print "i: " & i & vbTab & "Qty: " & Me("qty" & i) & vbTab & "Diff: " & iDiff & vbTab & "Raw: " & Me("raw" & i) 
Next i 

    If dPriceM <> 0 Then ' Did we find a suitable match? 
     MsgBox "Make Quantity: " & Me.[Make Quantity] & vbCrLf & "Price: " & dPriceM 
    Else  ' Didn't find a good match; must be < lowest or > highest 
     If iQtyL > Int(Me.[Make Quantity]) Then  ' Greater than lowest QTY, use Lowest QTY price... 
      MsgBox "Make Quantity: " & Me.[Make Quantity] & vbCrLf & "Price: " & dPriceL 
     ElseIf iQtyH < Int(Me.[Make Quantity]) Then  ' Greater than highest QTY, use highest QTY price... 
      MsgBox "Make Quantity: " & Me.[Make Quantity] & vbCrLf & "Price: " & dPriceH 
     Else 
      MsgBox "Impossible? Asked for Qty of: " & Me.[Make Quantity] & vbCrLf & _ 
       "Lowest Qty: " & iQtyL & vbTab & _ 
       "Highest Qty: " & iQtyH 

     End If 
    End If 
End Sub 
+0

こんにちはウェイン - これはありがとう - 私は明日それを試して、あなたに戻って取得する必要があります – superllanboy

+0

Iveは上記のコードを少し変更し、それはうまく動作しますが、私はあなたが助言することができます小さな微調整が必​​要です。私が20と30の量を持っていて、ユーザーが27のmake qtyを入力した場合、生のqtyは30ではなく20と関連付けられる必要があります。上記のコードは20から25までの値に対して20を選び、 30を26と30の間の値に設定します。これを達成する方法を提案できますか? - ありがとう – superllanboy

+0

さて、今私はより多くの情報が必要です。 QTYの値は常にMOD 10か、それとも任意の値にできますか? MOD 10がMOD 10でない場合は簡単に、次に '21'の代わりに '20'をとるときを定義します。 –

関連する問題