![名称未設](https://assets.st-note.com/production/uploads/images/9018961/rectangle_large_type_2_a85a2e29211d382df04f0c74599b408f.jpg?width=800)
【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
バックナンバー
この記事が気に入ったらサポートをしてみませんか?