2011-12-17 12 views
-4

特定の変数に複数の値があり、それらを処理するために多くのIF ELSEステートメントをスタックしたくないのでSELECT CASEステートメントを使用してコードを修正する人がいれば、感謝しています。IFステートメントを選択する方法を変更する方法ケース

また、dgMarksEntry.Item(7, i).ValuedgMarksEntry.Item(8, i).Valueは、それぞれRANKCOUNTを入力してください。

For i = 0 To 100 
     dgMarksEntry.Item(4, i).Value = Val(dgMarksEntry.Item(3, i).Value) + Val(dgMarksEntry.Item(2, i).Value) 

     If dgMarksEntry.Item(4, i).Value >= 80 Then 
      dgMarksEntry.Item(5, i).Value = "A1" 
      dgMarksEntry.Item(6, i).Value = "Excellent" 
     ElseIf dgMarksEntry.Item(4, i).Value >= 75 Then 
      dgMarksEntry.Item(5, i).Value = "B2" 
      dgMarksEntry.Item(6, i).Value = "Very good" 
     ElseIf dgMarksEntry.Item(4, i).Value >= 70 Then 
      dgMarksEntry.Item(5, i).Value = "B3" 
      dgMarksEntry.Item(6, i).Value = "Good" 
     ElseIf dgMarksEntry.Item(4, i).Value >= 65 Then 
      dgMarksEntry.Item(5, i).Value = "C4" 
      dgMarksEntry.Item(6, i).Value = "Credit" 
     ElseIf dgMarksEntry.Item(4, i).Value >= 60 Then 
      dgMarksEntry.Item(5, i).Value = "C5" 
      dgMarksEntry.Item(6, i).Value = "Credit" 
     ElseIf dgMarksEntry.Item(4, i).Value >= 55 Then 
      dgMarksEntry.Item(5, i).Value = "C6" 
      dgMarksEntry.Item(6, i).Value = "Credit" 
     ElseIf dgMarksEntry.Item(4, i).Value >= 50 Then 
      dgMarksEntry.Item(5, i).Value = "D7" 
      dgMarksEntry.Item(6, i).Value = "Pass" 
     ElseIf dgMarksEntry.Item(4, i).Value >= 40 Then 
      dgMarksEntry.Item(5, i).Value = "E8" 
      dgMarksEntry.Item(6, i).Value = "Weak pass" 
     ElseIf dgMarksEntry.Item(4, i).Value <= 39 Then 
      dgMarksEntry.Item(5, i).Value = "F9" 
      dgMarksEntry.Item(6, i).Value = "Fail" 
     End If 
    Next 
+3

あなたは*あなたが*あなた*のためのコードを作成したい! – Marlon

+1

あなたのSQLを表示してください...何を試しましたか?何がうまくいかないの? – Yahia

答えて

1

私は完全に異なるアプローチを選ぶだろう。まず、レーティング情報を含めることができ、クラスを宣言:

Public Class CreditRating 
    Private m_Limit As Integer 
    Public Property Limit() As Integer 
     Get 
      Return m_Limit 
     End Get 
     Set(ByVal value As Integer) 
      m_Limit = value 
     End Set 
    End Property 

    Private m_Rating As String 
    Public Property Rating() As String 
     Get 
      Return m_Rating 
     End Get 
     Set(ByVal value As String) 
      m_Rating = value 
     End Set 
    End Property 

    Private m_Appreciation As String 
    Public Property Appreciation() As String 
     Get 
      Return m_Appreciation 
     End Get 
     Set(ByVal value As String) 
      m_Appreciation = value 
     End Set 
    End Property 
End Class 

その後にあなたのロジックを変更します。このアプローチで

Dim ratings As New List(Of CreditRating) 

ratings.Add(New CreditRating With {.Limit = 80, .Rating = "A1", .Appreciation = "Excellent"}) 
ratings.Add(New CreditRating With {.Limit = 75, .Rating = "B2", .Appreciation = "Very good"}) 
ratings.Add(New CreditRating With {.Limit = 70, .Rating = "B3", .Appreciation = "Good"}) 
ratings.Add(New CreditRating With {.Limit = 65, .Rating = "C4", .Appreciation = "Credit"}) 
ratings.Add(New CreditRating With {.Limit = 60, .Rating = "C5", .Appreciation = "Credit"}) 
ratings.Add(New CreditRating With {.Limit = 55, .Rating = "C6", .Appreciation = "Credit"}) 
ratings.Add(New CreditRating With {.Limit = 50, .Rating = "D7", .Appreciation = "Pass"}) 
ratings.Add(New CreditRating With {.Limit = 40, .Rating = "E8", .Appreciation = "Weak pass"}) 
ratings.Add(New CreditRating With {.Limit = 0, .Rating = "F9", .Appreciation = "Fail"}) 

For i As Integer = 0 To 100 
    Dim value As Double = Conversion.Val(dgMarksEntry(3, i).Value) + Conversion.Val(dgMarksEntry(2, i).Value) 
    dgMarksEntry(4, i).Value = value 
    For Each rating As CreditRating In ratings 
     If value >= rating.Limit Then 
      dgMarksEntry(5, i).Value = rating.Rating 
      dgMarksEntry(6, i).Value = rating.Appreciation 
      Exit For 
     End If 
    Next 
Next 

、あなたはまた、ファイルやデータベースからの評価情報を読むことができました。これにより、制限を変更しやすくなります。また、ロジックは1回だけプログラムされ、すべてのリミットで同じであるため、エラーの発生が少なくなります。

+0

ありがとうございます。私はあなたのコードを完全に理解しています。それはとてもうまくいく。 – Akaglo

1

このページには、開始するためのいくつかの例が含まれています。

http://msdn.microsoft.com/en-us/library/cy37t14y.aspx

+0

私はリンクをチェックしましたが、まだそれを得ることができました。 IF ELSEステートメントをSELECT CASEに変更してみてください。ちょうど私のためのいくつかの例を試してください。 – Akaglo

+0

@Akaglo:If dgMarksEntry.Item(4、i).Value> = 80 Then'の代わりに 'Case dgMarksEntry.Item(4、i).Value Is> = 80'と書いてみましたか?それで... –

関連する問題