2016-08-04 18 views
0

Ich habe 3 Spalten in meiner Excel-Datei: Name, Prozent und Note.VBA Codierung "bis oder während" und "Schleife"

Ich möchte den Buchstaben Grad automatisieren (z. B. Prozent von 95 wird "A" generieren) in der dritten Spalte bis zur letzten Zeile zu füllen.

Ich bekomme immer einen Fehler in Bezug auf wie ich diesen Code loop. Irgendeine Einsicht?

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

Welche Fehler haben Sie bekommen? –

+0

Ein 'Select Case' wäre besser IMHO. –

Antwort

1

Das Problem ist, dass Punktzahl eine Zahl ist und wird immer <> „“ sein.

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

Petrie Manuel, bin ich nicht sicher, in welchem ​​Fall, dass Sie möchten, dass Ihre Else Anweisung:

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

Da, wenn die Partitur weniger als 60 Sie eine F gesetzt wird, nicht wahr?

Wie auch immer, um Ihren Code und logische Anweisungen zu vereinfachen, habe ich Select Case.

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

seit:

  • Zahlen in der Spalte "B" sind Prozentsätze -> immer zwischen 0 und 100

  • Ihr Bedarf wird sie um ein Vielfaches von 10 Parsen

dann könnte man wie folgt gehen:

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 

sollten Ihre Prozentsätze aus den Formeln kommen dann einfach xlCellTypeConstants ersetzen mit xlCellTypeFormulas

+0

@PetrieManuel: hast du es geschafft? – user3598756

+0

@PetrielManuel: Es wäre nett von Ihnen, Feedbakcs Leuten zu geben, die versuchen und Ihnen helfen – user3598756