PCメモ

Excelを中心とした業務改善の記録

VBA100本ノック8本目:点数の合否判定

excel-ubara.com

出題内容

「成績表」シートに5教科の成績表があります。
以下の2条件を満たした者が合格となります。
・5教科合計が350点以上
・全ての科目が50点以上
G列に、合格者に対しては「合格」と出力し、不合格は空欄にしてください。

VBA マクロ 100本ノック

自分の解答

Dim 合計 As Long
Dim i As Long

For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row

 合計 = WorksheetFunction.Sum(Range("B" & i & ":" & "F" & i))

 If Cells(i, 2) >= 50 And Cells(i, 3) >= 50 And Cells(i, 4) >= 50 _
   And Cells(i, 5) >= 50 And 合計 >= 350 Then
  Cells(i, 7) = "合格"
 Else
  Cells(i, 7) = ""
 End If

Next i

 

解説

列・行に二重ループを作成するとみやすい。

Sub VBA100_08_01()
 Dim ws As Worksheet 
 Set ws = Worksheets("成績表")

 Dim i As Long, j As Long, t As Long
 For i = 2 To ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
  t = 0
  For j = 2 To 6
   If ws.Cells(i, j) < 50 Then
    t = 0
    Exit For
   End If
   t = t + ws.Cells(i, j)
  Next
  ws.Cells(i, 7) = ""
  If t >= 350 Then
   ws.Cells(i, 7) = "合格"
  End If
 Next
End Sub

VBA100本ノック 8本目:点数の合否判定|VBA練習問題

 

Exit For を使うことでループから抜けることができる。

If ws.Cells(i, j) < 50 Then なら t=0  となりExit For
ws.cells(i,7) = "" へ移動する。