2016-08-04 14 views
0

私のExcelファイルには、名前、パーセンテージ、グレードの3つの列があります。vba coding "until until or while"と "loop"

最後の行まで3番目の列に入力する文字の等級を自動化したい(たとえば、パーセントが "A"を生成します)。

このコードをどのようにループするかに関するエラーが発生し続けます。どんな洞察?

Sub Grades() 
    Dim score As Integer 

    Dim x As Integer 
    x = 1 
    score = Sheets("sheet1").Cells(x, 2).Value 

    Do While score <> "" 

     If score >= 90 And score <= 100 Then 
      Sheets("Sheet1").Cells(x, 3).Value = "A" 

     ElseIf score > 79 And score < 90 Then 
      Sheets("Sheet1").Cells(x, 3).Value = "B" 

     ElseIf score > 69 And score < 80 Then 
      Sheets("Sheet1").Cells(x, 3).Value = "C" 

     ElseIf score > 59 And score < 70 Then 
      Sheets("Sheet1").Cells(x, 3).Value = "D" 

     ElseIf score < 60 Then 
      Sheets("Sheet1").Cells(x, 3).Value = "F" 

     Else 
      Sheets("Sheet1").Cells(x, 3).Value = "" 

    End If 

x = x + 1 
score = Sheets("sheet1").Cells(x, 2).Value 

Loop 
+1

xlCellTypeConstantsを代用? –

+0

'Select Case'はより良いIMHOでしょう。 –

答えて

1

問題はスコアが数字で、常に<> ""になることです。

Sub Example2() 
    Dim score As Integer 
    Dim x As Integer 
    x = 2 

    With Sheets("sheet1") 
     Do While .Cells(x, 2).Value <> "" 

      score = .Cells(x, 2).Value 

      If score >= 90 And score <= 100 Then 
       .Cells(x, 3).Value = "A" 

      ElseIf score > 79 And score < 90 Then 
       .Cells(x, 3).Value = "B" 

      ElseIf score > 69 And score < 80 Then 
       .Cells(x, 3).Value = "C" 

      ElseIf score > 59 And score < 70 Then 
       .Cells(x, 3).Value = "D" 

      ElseIf score < 60 Then 
       .Cells(x, 3).Value = "F" 

      Else 
       .Cells(x, 3).Value = "" 

      End If 
      x = x + 1 

     Loop 

    End With 
End Sub 
1

ペトリーマヌエル、私はあなたのElseステートメントを使用したい場合はわからない:

Sheets("Sheet1").Cells(x, 3).Value = "" 

スコアが60未満の場合は、 Fを配置しますので、ノー?

とにかく、コードとロジックステートメントを簡略化するために、を選択してください。を選択してください。

Sub Grades() 

    Dim score  As Integer 
    Dim x   As Integer 
    Dim sht1  As Worksheet 

    Set sht1 = ThisWorkbook.Worksheets("sheet1") 

    ' if your first row is for table headers 
    x = 2 

    With sht1 
     Do While .Cells(x, 2).Value <> "" 
      score = .Cells(x, 2).Value 

      Select Case score 
       Case Is >= 90 
        .Cells(x, 3).Value = "A" 

       Case Is >= 80 
        .Cells(x, 3).Value = "B" 

       Case Is >= 70 
        .Cells(x, 3).Value = "C" 

       Case Is >= 60 
        .Cells(x, 3).Value = "D" 

       Case Is < 60 
        .Cells(x, 3).Value = "F" 

       Case Else 
        .Cells(x, 3).Value = "" 

      End Select 

      x = x + 1 
     Loop 

    End With 

End Sub 
0

以来:コラム "B" で

  • 数字はパーセントである - >は常に0〜100

  • あなたの必要性は、10

の倍数でそれらを解析しています

次のようになります。

Option Explicit 

Sub Grades() 
    Dim cell As range 
    With Sheets("scores") '<--| change "scores" with your actual sheet name 
     For Each cell In .range("B1", .Cells(.Rows.Count, "B").End(xlUp)).SpecialCells(xlCellTypeConstants, xlNumbers) '<--| loop through "numeric" column "B" cells down to last non empty one only 
      cell.Offset(, 1) = Choose(Int(cell.value/10) + 1, "F", "F", "F", "F", "F", "F", "D", "C", "B", "A", "A") 
     Next cell 
    End With 
End Sub 

はあなたの割合は式から来る必要があり、その後、単にあなたがどのようなエラーを取得しているxlCellTypeFormulas

+0

@PetrieManuel:あなたはそれを通過しましたか? – user3598756

+0

@PetrielManuel:あなたに試して助けてくれる人々にフィードバクを与えるのはいいことです – user3598756

関連する問題