練習問題と内容について
・練習問題の狙い
このシリーズでは課題を元にマクロVBAを実践することでスキルを身につけることが出来ます。
正直、ソースコード作成については実践あるのみです!
答えのコードについては数例挙げますが、「もっといい答えがある」などの意見があれば
問い合わせから連絡ください!
こんな問題を作ってほしいなどの意見もお待ちしております!
・練習問題23について
こちらはマクロVBAの知識で少し発展した課題になります。
今回は文字・数値のみのデータのみカウントし、数式や空白を判定して除外するする練習問題となります。
それでは頑張っていきましょう!
練習問題の内容と動作説明
問題内容
ル番地A1からA10までのセルのうち、文字・数値のみが含まれているセルの個数を数え、その個数をセル番地C2に表示する。
動作説明
VBAを使用して、指定された範囲のセルを調査し、文字や数値が含まれているセルの個数を数えます。
その結果をセル番地C1に表示します。
ヒント
以下のヒントを参考にして解答コードを作成してみてください。
・ヒントその1
条件分岐を使用して、セルの内容が文字や数値を含んでいるかを判定します。
条件式を使って、文字や数値が含まれている場合にカウントを増やします。
一例を紹介します。
②WorksheetFunction.IsNumber(判定対象) ・・・数式で計算した数値を含める
②WorksheetFunction.IsText(判定対象)・・・文字・数式で計算した文字を含める
以上のヒントを参考に課題に取り組んでみてください!
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関数は空白を含める特徴があります
②WorksheetFunction.IsNumber(判定対象) ・・・数式で計算した数値を含める
文字の判定
VarTypeまたはWorksheetFunction.IsTextを使用して文字であるか判断します。
しかし、VarTypeを「vbString」で条件分岐した場合は数値を含める特徴があります
②WorksheetFunction.IsText(判定対象)・・・文字・数式で計算した文字を含める
空白の判定
IsEmptyを使用して空白であるか判断します。
数式の値の判定
HasFormulaを使用して空白であるか判断します。
まとめ
この練習問題では、VBAを使用してセルの範囲内に含まれる文字や数値を判定し、個数を数える操作について学びました。
具体的には、セル番地A1からA10までのセルのうち、文字や数値が含まれているセルの個数を数え、
その結果をセル番地C2に表示する問題を解きました。
この問題を解くためには、ループ構造や条件分岐を活用し、セルの値を判定する方法が必要でした。
VBAを使うことで、Excelの操作やデータ処理を自動化し、効率化することができます。
練習問題を通じて、VBAの基本的な構文や関数、ループ処理、条件分岐などのスキルを向上させましょう。
次の練習問題では、さらに応用的な操作や問題に取り組んでいきますので、ステップバイステップで取り組んでスキルを磨いていきましょう。
以上が練習問題23となります。お疲れ様でした!