名称未設

【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」としてもよいです。

バックナンバー


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