【マクロVBA練習問題10】正(プラス)・負の値(マイナス)の個数を表示・判別する

マクロVBA練習問題




練習問題と内容について

・練習問題の狙い

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

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

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

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

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

・練習問題10について

こちらはマクロVBAの初歩的な知識になります。

指定されたセルの正・負の値の個数を表示する練習問題となります。

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

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

問題内容

セル番地A1からA10までの数値を対象に、C2には負の数、C5には正の数を入力する

動作説明

VBAを使用して、セル番地A1からA10までの値を取得し、その中で負の値の個数を数えてセル番地C2、
正の値の個数を数えてセル番地C5に表示します。

具体的には、セル番地A1からA10までの値を順番に取得し、
正の値または負の値をカウントアップします。

ヒント


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

・ヒントその1

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

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

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

・ヒントその2

正の値または負の値であれば、変数をカウントアップします。

カウントアップ方法は「変数=変数+1」で指定した変数がカウントアップされます。

・ヒントその3

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

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

判別する際は不等式を使用します。
例えば「対象の数値 < 0」の場合、対象の数値0より小さいことから負の値であることがわかります。

この構造を活用して、正の値または負の値か判断します。


これらのヒントを参考にして、解答コードを作成してみてください。  

 

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

 

解答コード

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

・回答その①

Sub Exercise10to1()
Dim rng As Range
Dim cell As Range
Dim count As Integer

‘ セル番地A1からA10までの範囲を指定
Set rng = Range(“A1:A10”)

count = 0 ‘ カウンターを初期化

‘ 範囲内の各セルに対してループ
For Each cell In rng
‘ 負の値であるかを判定
If cell .Value < 0 Then
count = count + 1 ‘ カウンターをインクリメント
End If
Next cell

‘ 結果を表示
Range(“C2”).Value = count
Range(“C5”).Value = 10 – count
End Sub
このコードでは、セル番地A1からA10までの範囲を指定し、各セルの値を調べています。
その際は「For Each cell In rng」で対象の範囲を繰り返し処理するようにしています。

負の値を見つけた場合は、変数count のカウントアップしています
 
また、負の数か求める際には「If cell .Value < 0 Then」のように対象のセルの値が
0を下回っていたら負の数と判断してカウントアップを行います。

・回答その②

Sub Exercise10to2()
Dim rng As Range
Dim count As Long

‘ セル番地A1からA10までの範囲を指定
Set rng = Range(“A1:A10”)

count = WorksheetFunction.CountIf(rng , “<0”)

‘ 結果を表示
Range(“C2”).Value = count
Range(“C5”).Value = 10 – count
End Sub

このコードでは、WorksheetFunction.CountIf 関数を使用して、
セル番地A1からA10までの範囲内で負の値の個数を数えています。

カウントの条件を「“<0”」とすることで負の数を計算するようにしています。

この回答例では、ループ処理を使用せずに組み込みの関数を活用して個数を計算しています。

 

 

必要な知識

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

ループ構造

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

今回はFor Each文を使用しました。

セルの範囲指定

VBAでは、RangeオブジェクトやCellsオブジェクトを使用してセルを対象にします。

Rangeオブジェクトは、セルの範囲を指定する際に使用されます。例えば、Range(“A1”)はセル番地A1を指定します。
Cellsオブジェクトは、行番号と列番号を指定してセルにアクセスする際に使用されます。

例えば、Cells(1, 1)はセル番地A1を指定します。

正の値または負の値であるかどうかを判定する

例題では負の数を求める際には「If cell .Value < 0 Then」のように処理しました。
こちらは対象のセルの値が0を下回っているか確認して、0を下回っていたら負の数と判断しています。

WorksheetFunction.CountIf 関数を使用した場合は検索条件を“<0”とすることで負の数を求めることが出来ます。

 

まとめ

この練習問題では、セル番地A1からA10までの正の値あたは負の値の個数を表示するという課題に取り組みました。


VBAを使うことで、Excelの操作を自動化したり、複雑な計算や処理を行ったりすることができます。
練習問題を通じて、VBAのスキルを向上させ、より高度な操作や処理を行えるようになることを目指しましょう。

次の練習問題では、さらに別の課題に取り組んでいきますので、順番に解いていくことでスキルを磨いていきましょう。
以上で練習問題10となります。お疲れ様でした!