![名称未設](https://assets.st-note.com/production/uploads/images/9008368/rectangle_large_type_2_9c5fa6509349c7009b7a5392e198cd77.jpg?width=800)
【ExcelVBA公開模試】最小値を保存して、条件付き最小値を求める
文法を無視して、とりあえず動けばいいという邪道ExcelVBA講座こと「速読VBA単語」に準拠した問題を出題します。
わえなび速読VBA単語「趣旨および取扱説明書」
https://note.mu/waenavi/n/nb7dde90bdc34
問題
図1で、セルB1、B2、・・・に数値が入力されている。最大で100行目まで(セルB100まで)入力する可能性があることが分かっている。
ExcelVBAを用いて、B列の数値の最小値とそのときの行番号をセルE1:E2に求めなさい(図2)。ただし、A列が空白になった時点で最小値の計算を終了する(図3)。
※A列が空白でなければ、B列には必ず数値が入っている。
※最小値が複数ある時は最も小さい行番号を表示する。
<図1>
<図2:完成イメージ>
<図3>
わえなび式 正解例
(このページの下にあります)
目標回答時間
プロ2分以内、アマチュア10分以内に処理ができたら合格
この問題の出題範囲
「速読VBA単語」Program3-4まで
ご案内
ExcelVBAをなんとなく理解できればいいという初心者のための「速読VBA単語」を受講希望の方はカリキュラムをご覧ください。
考え方
最小値を求めるには、[最小値保存用の変数]を1つ用意して
(1)初期値の設定
(2)ループ
(3)ループの内側にIf文を書き、小さければ上書き
(4)ループの後で変数を出力
の4つを記述します。さらに、行番号も保存する場合はそのための変数が必要です。
[変数] = 初期値(たいていは1番目の値にする)
For i = ~
If [変数] > [得点] Then
[変数] = [得点]
End If
Next
セルなどに出力 ← [変数]
正解例
空白だったら最小値の判定をする前にExit Forをすればよいです。
Sub moshi()
min_point = Range("B2")
min_row = 1
For i = 2 To 100
If Cells(i, 1) = "" Then Exit For
p = Cells(i, 2)
If min_point > p Then
min_row = i
min_point = p
End If
Next
Range("E1") = min_row
Range("E2") = min_point
End Sub
別解
For文の最後に「If Cells( i+1 , 1) = "" Then Exit For」としてもよいです。
バックナンバー
この記事が気に入ったらサポートをしてみませんか?