2017-11-16 15 views
1

私は現在、自分のクラスの1つでVBAを勉強している学生です。現在の割り当てでは、.txtファイルからデータを取り出して表示し、それを合計して合計をグレードします。配列を使って私は配列を使って最初の2つの部分で成功しましたが、グレードの合計を考慮に入れようとするとき、配列は開始数だけを考慮に入れます。何かご意見は?以下のコードなぜ私の条件が間違った結果を返すのですか?

Sub Categories() 

Dim Locale As String, State(1 To 50) As Variant 
Dim Serial(1 To 50) As Single, i As Single 
Dim path As String, j As Single 
Dim Score(1 To 50, 1 To 7) As Single 
Dim IndexGrade(1 To 50) As Single 
Dim Total(1 To 50) As Single 
Locale = ActiveWorkbook.path 

path = Locale & "US_States.txt" 

Open path For Input As #1 

For i = 1 To 50 Step 1 
    Input #1, Serial(i), State(i) 
    Sheet1.Cells(1 + i, 1).Value = Serial(i) 
    Sheet1.Cells(1 + i, 2).Value = State(i) 
     For j = 1 To 7 Step 1 
      Input #1, Score(i, j) 
      Total(i) = Total(i) + Score(i, j) 
      Sheet1.Cells(1 + i, 3).Value = Total(i) 
     Next j 
    Total(i) = Sheet1.Cells(1 + i, 3).Value 
    If 0 <= Total(i) < 100 Then 
    Sheet1.Cells(1 + i, 4).Value = "A" 
    ElseIf 100 <= Total(i) < 200 Then 
    Sheet1.Cells(1 + i, 4).Value = "B" 
    ElseIf 200 <= Total(i) < 300 Then 
    Sheet1.Cells(1 + i, 4).Value = "C" 
    ElseIf 300 <= Total(i) Then 
    Sheet1.Cells(1 + i, 4).Value = "D" 
    End If 
Next i 

Close #1 

End Sub 
+0

をなぜあなたはあなたの合計(I)の上に書き込みされていますか?また、「IF」条件が間違っている。このVBAはPythonではありません。 – cyboashu

+0

私はあなたが 'Sheet1'コードネームを使用していて、' .Value'メンバーコールを明示的に指定しているのが大好きです。しかし、あなたのインデントはいくつかの助けを使うことができ、変数はその使用方法に近いと宣言されるべきです。プログラミングに賢明で(言語にとらわれない)、手続きは意味のある名前でなければなりません。*これは、処理と出力から入力を分離するだけで、より小さく、より特殊化された手続きや関数に分解されるはずです。いくつかの便利なリンクについては、私のユーザープロファイルを参照してください。 –

答えて

2

問題はIfの問題です。 VBAで1 < 2 < 1trueと評価されます。あなたのtotal(i)が100以上の場合でも、常にtrueと評価され、elseifは出場していません。

VBA/VB6では、型変換は単純に悪です。あなたのIfelseif条件

例書き換えること旧姓


Sub test() 

    Dim x As Long 
    Dim y As Long 

    x = 101 
    y = 99 

    '/ What you are doing 
    If 0 <= x < 1 Then 
     MsgBox "This is not python." 
    End If 

    '/ How you should do it. 
    If y >= 0 And y < 100 Then 
     MsgBox "This is how you do it in VBA." 
    End If 

End Sub 
関連する問題