名称未設

【ExcelVBA公開模試】同じ数値やセル参照を何回も使ってはいけない

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

問題

図1のように、セルA1~A100に数値が入力されている。ExcelVBAを用いて次の処理を実行しなさい。
(1)70以上であればその右隣のセルに「合格」、それ以外は「不合格」と表示しなさい(図2)。
(2)さらに、図3のように「合格基準70、合格者~人」と合格者数を表示しなさい。

<図1>

<図2:設問(1)完成イメージ>

<図3:設問(2)完成イメージ>

わえなび式 正解例

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

目標回答時間

プロ2分以内、アマチュア10分以内に処理ができたら合格

この問題の出題範囲

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

ご案内

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

考え方

設問(2)について、条件付きのカウントは次の4点を記述します。
1.カウント用の変数=0
2.ループ
3.ループの中にIf文で条件を書き、さらにその中でインクリメント
4.カウント用の変数を出力

これは不正解!!

設問(2)について、次のようなコードは不正解とします。合格基準である「70」が2か所ありますが、もし合格基準が変わった場合は両方直す必要があります。このような不便なコードを記述してはいけません。

Sub kakko2()
   cnt = 0
   For i = 1 To 100
       If Cells(i, 1) >= 70 Then
           Cells(i, 2) = "合格"
           cnt = cnt + 1
       Else
           Cells(i, 2) = "不合格"
       End If
   Next
   MsgBox "合格基準70、合格者" & cnt & "人"
End Sub

正解例

2か所以上共通するものがあれば、必ず変数にして最初のほうに記述します。

Sub kakko1()
   For i = 1 To 100
       If Cells(i, 1) >= 70 Then
           Cells(i, 2) = "合格"
       Else
           Cells(i, 2) = "不合格"
       End If
   Next
End Sub

Sub kakko2()
   cnt = 0
   kijun = 70
   For i = 1 To 100
       If Cells(i, 1) >= kijun Then
           Cells(i, 2) = "合格"
           cnt = cnt + 1
       Else
           Cells(i, 2) = "不合格"
       End If
   Next
   MsgBox "合格基準" & kijun & "、合格者" & cnt & "人"
End Sub

別解

さらに「Cells(i, 2)」も2か所あるので変数にしたほうがよいです。

Sub kakko2()
   cnt = 0
   kijun = 70
   For i = 1 To 100
       If Cells(i, 1) >= kijun Then
           hantei = "合格"
           cnt = cnt + 1
       Else
           hantei = "不合格"
       End If
       Cells(i, 2) = hantei
   Next
   MsgBox "合格基準" & kijun & "、合格者" & cnt & "人"
End Sub

バックナンバー


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