【マクロVBA練習問題12】指定した数値以下の最大値を表示!IFの複数条件処理を実践

条件分岐




練習問題と内容について

・練習問題の狙い

このシリーズでは課題を元にマクロVBAを実践することでスキルを身につけることが出来ます。

正直、ソースコード作成については実践あるのみです!

答えのコードについては数例挙げますが、「もっといい答えがある」などの意見があれば

問い合わせから連絡ください!  

こんな問題を作ってほしいなどの意見もお待ちしております!

・練習問題12について

こちらはマクロVBAの知識で少し発展した課題になります。

指定されたセルの数値の中で指定数値以下の最大値を表示する練習問題となります。

それでは頑張っていきましょう!

練習問題の内容と動作説明

問題内容

セル番地A1からA10までの数値の中で100以下の数値の最大値を持つセルの値を表示する。

動作説明

VBAを使用して、セル番地A1からA10までの数値を比較し、その中で100以下の数値の最大値を持つセルの値を表示します。

ヒント


以下のヒントを参考にして解答コードを作成してみてください。

・ヒントその1

ループを使用してセル番地A1からA10までの値を順番に取得します。

例えば下記のような見本を紹介します。

For Each cell In Range(“A1:A10”)
 ‘ここに処理
Next cell
これにより、A1からA10まで順に繰り返し処理を行います。

・ヒントその2

各セルの値が100以下の場合に、その値を保持する変数を使用して、最大値を更新します。

最大値の値を保持するためには変数を用いて「変数=最大値」のように格納しておく必要があります。

・ヒントその3

取得した値が最大値であるかどうかを判定する条件分岐を使用します。

条件分岐はIf Thenを使用します。

例えば「数値1が90」、「数値2が80」の場合、「If 数値1>数値2 then」で数値1が大きかった時の処理が行われます。

この構造を活用して、最大値を判断していきます。

さらに、100以下も条件として追加する必要があるため、2つの条件式が必要です。

その際のソースコードは下記の通りです。

If 条件式1  And 条件式2 Then
このように「And」を用いることで2つの条件を設定することが可能です。

・ヒントその4

今回は少し発展した内容を含めてみましょう。
仮に数値以外の文字などが入力されてあった場合エラーとなってしまいます。

そうなれば、優秀なソースコードは呼べません。
そこで処理前に数値であることを確認して処理してみましょう。

確認方法はIsNumeric(対象のセル・変数)となります。

 

以上のヒントを参考に課題に取り組んでみてください!

 

最新・便利な機能を搭載したExcel・officeを試しませんか?
Excel 2013以下を使用している方はサポートが終了しているので注意が必要です!
【最新2023年】Excel・Officeの価格比較!あなたに合ったオススメの製品の選定方法から購入 ► 独学エクセル塾 (dokugakuexcel.com)
 

 

解答コード

では回答を見ていきましょう!

・回答その①

Sub Exercise12to1()

 Dim maxVal As Double
 Dim cell As Range

maxVal = -99999 ‘ 初期値を負の無限大に設定

For Each cell In Range(“A1:A10”)
 If IsNumeric(cell .Value) And cell.Value <= 100 Then
  If cell .Value > maxVal Then
   maxVal = cell .Value
  End If
 End If
Next cell

Range(“C2”).Value = maxVal

End Sub

 

上記のコードは、セル番地A1からA10までの数値の中で100以下の数値の最大値を持つセルの値を表示するVBAのマクロです。

解答コードの説明:
1. maxVal という変数を用意し、初期値を負の無限大に設定します。
2. `For Each`ループを使用して、セル番地A1からA10までの範囲をループします。
3. 各セルの値が数値であり、100以下の場合に条件を満たすかどうかを判定します。
4. 条件を満たす場合、そのセルの値が現在のmaxVal よりも大きい場合は、maxVal を更新します。
5. ループが終了した後、maxVal に格納された最大値をメッセージボックスで表示します。

 

ちなみに今回は「 IsNumeric(cell .Value)」を使用することで対象のセルが数値か判断しています。
数値でなければスルーしてくれます。

それでは実行してみましょう。
結果はこのようになります。

10個の数値の中で100以下の最大の数は「64」なので上手く機能していることがわかります。

・回答その②

Sub Exercise12to2()

 Dim maxVal As Double
 Dim cell As Range

maxVal = 0 ‘ 初期値を0に設定

For Each cell In Range(“A1:A10”)
 If IsNumeric(cell .Value) Then
  If cell.Value <= 100 And cell .Value > maxVal Then
   maxVal = cell .Value
  End If
 End If
Next cell

If maxVal = 0 Then
  MsgBox “100以下の数値は存在しません”
 Else
  Range(“C2”).Value = maxVal
End If

End Sub

この回答例では、初期値を0に設定し、ループ内で条件判定を行っています。

最大値が0のままであれば、100以下の数値は存在しないことをメッセージボックスで表示します。

 

 

必要な知識

この問題を解くためには、以下の基本的な知識が必要です。

ループ構造

偶数の個数を数えるためには、セル番地A1からA10までの値を1つずつ判定する必要があります。
ループ構造を使用して、指定した範囲のセルを順番に処理する方法を理解する必要があります。
今回はFor Each文For Next文を使用しました。

条件分岐

セルの値が偶数かどうかを判定するためには、条件分岐の文法を理解する必要があります。
VBAではIf…Then…Else文やSelect Case文などが使用されます。

 メッセージボックスの表示

メッセージボックスを表示するためには、MsgBox関数を使用します。
この関数を使うと、メッセージや結果をダイアログボックスとして表示することができます。

見本では「MsgBox “100以下の数値は存在しません”」と入力しましたが、下図のように表示されます。

セルの値が数値か判断

今回は少し発展した課題にしたため、対象のセルの値が数値であるか確認しました。

確認方法はIsNumeric(cell .Value)となります。

こちらを条件分岐に入れることで、文字などが入っていた場合は対象のセルをスルーするようにしています。

まとめ

この練習問題では、VBAを使用してセル番地A1からA10までの数値の中で100以下の数値の最大値を持つセルの値を表示する方法を学びました。

具体的には、ループを使用して各セルの値を比較し、条件を満たす場合に最大値を更新するという手法を用いました。

VBAを使うことで、Excelのデータを効率的に処理したり、特定の条件に基づいて操作したりすることができます。

練習問題を通じて、VBAの基礎知識を身につけ、より高度な処理や操作に挑戦してみましょう。

次の練習問題では、さらに複雑な問題に取り組んでいきますので、ぜひ続けて挑戦してください。

 

以上で練習問題12となります。お疲れ様でした!