名称未設

【ExcelVBA公開模試】ElseIfと普通のIfの違いを理論的に理解せよ

文法を無視して、とりあえず動けばいいという邪道ExcelVBA講座こと「速読VBA単語」に準拠した問題を出題します。

問題

セルA1~A100にランダムに数値が入力されている。次の4つのコードを実行するとそれぞれどのような実行結果になるか述べなさい。また、この中で最も適切なコードはどれか、理由を付けて述べなさい。

(1)

Sub kakko1()
   For i = 1 To 100
       If Cells(i, 1) >= 80 Then
           Cells(i, 2) = "優"
       End If
       If Cells(i, 1) >= 70 Then
           Cells(i, 2) = "良"
       End If
       If Cells(i, 1) >= 60 Then
           Cells(i, 2) = "可"
       End If
   Next
End Sub

(2)

Sub kakko2()
   For i = 1 To 100
       If Cells(i, 1) >= 60 Then
           Cells(i, 2) = "可"
       End If
       If Cells(i, 1) >= 70 Then
           Cells(i, 2) = "良"
       End If
       If Cells(i, 1) >= 80 Then
           Cells(i, 2) = "優"
       End If
   Next
End Sub

(3)

Sub kakko3()
   For i = 1 To 100
       If Cells(i, 1) >= 80 Then
           Cells(i, 2) = "優"
       ElseIf Cells(i, 1) >= 70 Then
           Cells(i, 2) = "良"
       ElseIf Cells(i, 1) >= 60 Then
           Cells(i, 2) = "可"
       End If
   Next
End Sub

(4)

Sub kakko4()
   For i = 1 To 100
       If Cells(i, 1) >= 60 Then
           Cells(i, 2) = "可"
       ElseIf Cells(i, 1) >= 70 Then
           Cells(i, 2) = "良"
       ElseIf Cells(i, 1) >= 80 Then
           Cells(i, 2) = "優"
       End If
   Next
End Sub

わえなび式 正解例

(このページの下にあります)

目標回答時間

回答時間無制限です。全部正確に答えられたら合格です。

この問題の出題範囲

「速読VBA単語」Program3-5まで

ご案内

ExcelVBAをなんとなく理解できればいいという初心者のための「速読VBA単語」を受講希望の方はカリキュラムをご覧ください。

考え方

これは「If 70以上」と「ElseIf 70以上」の違いが分かるかどうかがポイント。
・「If 70以上」は無条件に70以上なので当然80以上も含まれる。
・「ElseIf 70以上」は70以上であっても、それ以前にIfまたはElseIfによって処理が終わっている人は対象外となる。

正解例

(1)
60点以上の人全員「可」
代入は上書きなので原則として下の文が優先。80点以上を優にしても、60点以上がすべて可で上書きされてしまう。
(2)
60点以上の人「可」、さらに70点以上が「良」、さらに80点以上が「優」
ただし、80点以上の人は「可」→「良」→「優」と3回代入することになるので無駄な処理をしている。
(3)
80点以上が「優」、70点以上が「良」、60点以上が「可」
ElseIfは「それ以外でもし~だったら」という意味であり、80点以上、70点以上の人が2回以上代入されることがない。もちろん、これが最も良い。
(4)
60点以上の人全員「可」
60点以上の人が全員「可」となり、ElseIfは「それ以外でもし70点(80点)以上だったら」となるが、すでに、60点以上の人全員の処理が終わっているので、70点以上、80点以上の人は存在しない。

バックナンバー


この記事が気に入ったらサポートをしてみませんか?