【マクロVBA練習問題21】重複の判定!指定セル範囲内で同じ文字・数値がある場合は色を付ける

マクロVBA練習問題




練習問題と内容について

・練習問題の狙い

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

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

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

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

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

・練習問題21について

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

指定範囲内の重複した文字・数値を判定して、重複しているセルに色を付ける練習問題となります。

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

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

問題内容

セル番地A1からA10までのセルに入力されたテキストの中で、重複する値を持つセルの背景色を赤色に変更する。

動作説明

VBAを使用して、指定されたセル範囲内のテキストの重複をチェックし、

重複がある場合にそのセルの背景色を赤色に変更します。

ヒント


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

・ヒントその1

セルの背景色を変更するには、Interiorプロパティを使用します。

例えば、Range(“A1”).Interior.Color = RGB(255, 0, 0)というコードを使って、セルA1の背景色を赤色に変更することができます。

・ヒントその2

テキストの重複をチェックするためには、ループや条件分岐を使用します。

ループを使ってセル範囲内の値を1つずつ取得し、重複をチェックする必要があります。

・ヒントその3

重複をチェックするためには、配列やコレクションを使用する方法もあります。

セル範囲の値を配列に格納し、配列内で重複をチェックすることで効率的に処理できます。

 

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

 

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

 

解答コード

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

・回答その①

Sub Exercise21to1()
 Dim rng As Range
 Dim cell As Range
 Dim values As Collection

Set rng = Range(“A1:A10”)
Set values = New Collection

‘重複する値を持つセルを赤色に変更
For Each cell In rng
 On Error Resume Next
 values.Add cell.value, CStr(cell.value)
 If Err.Number <> 0 Then
  cell.Interior.Color = RGB(255, 0, 0) ‘背景色を赤色に変更
  Err.Clear
 End If
On Error GoTo 0
Next cell
End Sub

上記のコードは、セル範囲A1からA10のテキストの中で重複する値を持つセルの背景色を赤色に変更するVBAのマクロです。

解答コードでは、Collectionオブジェクトを使用して重複をチェックしています。

セル範囲内の値を順に処理し、値が既にコレクションに存在する場合は重複とみなし、セルの背景色を赤色に変更しています。

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

A5とA9はA3と同じ「エクセル」であるため重複と判断し、背景色が変わっています。

・回答その②

Sub Exercise21to2()
 Dim rng As Range
 Dim cell As Range
 Dim values As Object

Set rng = Range(“A1:A10”)
Set values = CreateObject(“Scripting.Dictionary”)

‘重複する値を持つセルを赤色に変更
For Each cellIn rng
 If Not values.Exists(cell.value) Then
   values.Add cell.value, 1
  Else
   cell.Interior.Color = RGB(255, 0, 0) ‘背景色を赤色に変更
 End If
Next cell
End Sub

この回答コードでは、Scripting.Dictionaryオブジェクトを使用して重複をチェックしています。

セル範囲内の値を順に処理し、値が辞書に存在しない場合は辞書に追加し、
既に存在する場合は重複とみなし、セルの背景色を赤色に変更しています。

 

 

必要な知識

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

セルの背景色の変更

セルの背景色を変更するには、Interior.Colorプロパティを使用します。
色はRGB値で指定します。例えば、赤色はRGB(255, 0, 0)で表されます。

 

コレクションや辞書の使用

重複をチェックするために、コレクションや辞書を使用します。

コレクションはCollectionオブジェクト、辞書はScripting.Dictionaryオブジェクトを使用します。

値を追加したり、既に存在するかチェックしたりすることができます。

 

まとめ

この練習問題では、VBAを使用してセル範囲内のテキストの重複をチェックし、

重複する値を持つセルの背景色を赤色に変更する方法について学びました。

具体的には、セル範囲A1からA10のテキストを比較し、重複する値を持つセルを特定し、その背景色を赤色に変更しました。

問題を解くためには、セルの背景色の変更、セル範囲の指定、コレクションや辞書の使用、ループ処理などの知識が必要でした。

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

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