【マクロVBA練習問題23】文字・数値のみのデータのみカウント!数式や空白を判定して除外する

マクロVBA練習問題




練習問題と内容について

・練習問題の狙い

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

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

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

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

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

・練習問題23について

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

今回は文字・数値のみのデータのみカウントし、数式や空白を判定して除外するする練習問題となります。

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

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

問題内容

ル番地A1からA10までのセルのうち、文字・数値のみが含まれているセルの個数を数え、その個数をセル番地C2に表示する。

動作説明

VBAを使用して、指定された範囲のセルを調査し、文字や数値が含まれているセルの個数を数えます。

その結果をセル番地C1に表示します。

ヒント


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

・ヒントその1

条件分岐を使用して、セルの内容が文字や数値を含んでいるかを判定します。
条件式を使って、文字や数値が含まれている場合にカウントを増やします。

一例を紹介します。

数値の判定:①IsNumeric(判定対象) ・・・空白・数式で計算した数値を含める
      ②WorksheetFunction.IsNumber(判定対象) ・・・数式で計算した数値を含める
文字の判定:①VarType(判定対象) = vbString・・・文字・数値・数式で計算した文字・数値を含める
      ②WorksheetFunction.IsText(判定対象)・・・文字・数式で計算した文字を含める
空白の判定:①IsEmpty(判定対象)
数式の判定:①判定対象.HasFormula
数値・文字の判定でもそれぞれ特徴があるので注意が必要です。
 

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

 

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

 

解答コード

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

・回答その①

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

‘ ソース範囲を設定
Set rng = Range(“A1:A10”)

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

‘ 各セルをチェックして文字列または数値のみをカウント
For Each cell In rng
‘ 空白または数式のセルを除外
  If Not IsEmpty(cell.value) And Not cell.HasFormula Then
‘ 文字列または数値のみをカウント
    If IsNumeric(cell.value) Or VarType(cell.value) = vbString Then
      count = count + 1
    End If
End If
Next cell

‘ 結果を表示
Range(“C2”).value = count


End Sub

上記のコードは、セル番地A1からA10までのセルのうち、文字や数値が含まれているセルの個数を数え、
その結果をセル番地B1に表示するVBAのマクロです

コードの解説
1. Dim count As Integerによって、カウントを格納するための変数countを宣言します。
2. count = 0で、カウントの初期値を0に設定します。
3. For Each cell In rngで、セル番地A1からA10までの範囲をループ処理します。
4. [If Not IsEmpty(cell.value) And Not cell.HasFormula Then]で、空白または数式のセルを除外します。
5. [If IsNumeric(cell.value) Or VarType(cell.value) = vbString Then]でセルの内容が数値または文字列であるかを判定します。
  条件を満たす場合、カウントを増やします。
6. Next cellでループを次に進めます。
7. Range(“C2”).Value = countで、カウント結果をセル番地C2に表示します。

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

文字・数値のみカウントすることが出来ていますね。

・回答その②

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

‘ ソース範囲を設定
Set rng = Range(“A1:A10”)

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

‘ 各セルをチェックして文字列または数値のみをカウント
For Each cell In rng
‘ 空白または数式のセルを除外
 If Not IsEmpty(cell.value) And Not cell.HasFormula Then
‘ 文字列または数値のみをカウント
  If WorksheetFunction.IsNumber(cell.value) Or WorksheetFunction.IsText(cell.value) Then
   count = count + 1
  End If
 End If
Next cell

‘ 結果を表示

Range(“B1”).value = count
End Sub

動作は一緒ですが、判断に使用するソースコードが異なります。

今回は数式の判別に「cell.HasFormula 」を使用し、
数値を「WorksheetFunction.IsNumber(cell.value)」、文字を「WorksheetFunction.IsText(cell.value) 」で判定しています。

判定するコードも複数あるので特徴を理解して使用してください。

 

必要な知識

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

数値の判定

IsNumeric関数またはWorksheetFunction.IsNumberを使用して数値であるか判断します。
しかし、IsNumeric関数は空白を含める特徴があります

数値の判定:①IsNumeric(判定対象) ・・・空白・数式で計算した数値を含める
      ②WorksheetFunction.IsNumber(判定対象) ・・・数式で計算した数値を含める

文字の判定

VarTypeまたはWorksheetFunction.IsTextを使用して文字であるか判断します。
しかし、VarTypeを「vbString」で条件分岐した場合は数値を含める特徴があります

文字の判定:①VarType(判定対象) = vbString・・・文字・数値・数式で計算した文字・数値を含める
      ②WorksheetFunction.IsText(判定対象)・・・文字・数式で計算した文字を含める

空白の判定

IsEmptyを使用して空白であるか判断します。

空白の判定:①IsEmpty(判定対象)

数式の値の判定

HasFormulaを使用して空白であるか判断します。

数式の判定:①判定対象.HasFormula

まとめ

この練習問題では、VBAを使用してセルの範囲内に含まれる文字や数値を判定し、個数を数える操作について学びました。

具体的には、セル番地A1からA10までのセルのうち、文字や数値が含まれているセルの個数を数え、
その結果をセル番地C2に表示する問題を解きました。

この問題を解くためには、ループ構造や条件分岐を活用し、セルの値を判定する方法が必要でした。

VBAを使うことで、Excelの操作やデータ処理を自動化し、効率化することができます。

練習問題を通じて、VBAの基本的な構文や関数、ループ処理、条件分岐などのスキルを向上させましょう。

次の練習問題では、さらに応用的な操作や問題に取り組んでいきますので、ステップバイステップで取り組んでスキルを磨いていきましょう。

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