出題内容
「成績表」シートに5教科の成績表があります。
以下の2条件を満たした者が合格となります。
・5教科合計が350点以上
・全ての科目が50点以上
G列に、合格者に対しては「合格」と出力し、不合格は空欄にしてください。
自分の解答
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
Exit For を使うことでループから抜けることができる。
If ws.Cells(i, j) < 50 Then なら t=0 となりExit For
ws.cells(i,7) = "" へ移動する。