EXCEL【VBAマクロ】: 1万件のデータから複数の検索条件で該当する項目に色を付ける方法

今回は、複数の検索条件にマッチする項目を見つけ出してみようと思います。使用するデータは、以前作成した「EXCEL: 1万件のテスト用データを簡単に作成する方法【VBAマクロ】」を使ってみます。

概要

1万件のデータに対して、For Next構文により、1件ずつ下記の条件にマッチングするか調べていきます。
・J3セルで選択した取引先担当者
・J7セルで記入した購入金額以上の場合
実行ボタンにマクロを登録して、実行すると該当セルが黄色になるようにしています。
<実行後>
特定条件で色を付ける_実行後

このマクロで出来ること
・複数項目の条件設定
・上記条件の場合の該当セルの色付け
・選択項目と色付けセルのリセット




コード【VBAマクロ】

「複数条件で検索」パートのコード

  1. Sub 特定条件で色を付ける()
  2.     Dim i As Integer
  3.     Dim i_lastrows As Integer
  4.     
  5.     i_lastrows = Range("A" & Rows.Count).End(xlUp).Row
  6.     Range("G2", Cells(i_lastrows, "G")).Interior.ColorIndex = xlNone
  7.  
  8.     For i = 2 To i_lastrows
  9.         If Range("B" & i).Value = Range("J3").Value And Range("G" & i).Value >= Range("J7").Value Then
  10.                 Range("G" & i).Interior.Color = vbYellow
  11.         ElseIf Range("J3").Value = "" Or Range("J7").Value = "" Then
  12.             MsgBox "取引先担当者を選択&購入額を記入してください"
  13.             Exit For
  14.         End If
  15.     Next i
  16. End Sub

「リセット」パートのコード

  1. Sub リセット()
  2.     Dim i_lastrows As Integer
  3.     i_lastrows = Range("A" & Rows.Count).End(xlUp).Row
  4.     
  5.     Range("G2", Cells(i_lastrows, "G")).Interior.ColorIndex = xlNone
  6.     Range("J3").ClearContents
  7.     Range("J7").ClearContents
  8. End Sub

コード【VBAマクロ】の解説

「複数条件で検索」パートの解説

2-3.
行をiと定義、また最終行をi_lastrowsと定義しています。
5.
End(xlUp).Rowにて、最終行を取得しています。
6.
前回の実行時のセルの色付けが残っていると、実行後の結果として、前回と今回の分のセルが黄色になるので、それを避けるために、これまでのセルの色をクリアしています。
8.
2行目から最終行目(i_lastrows)まで、For Nextでループします。
9-10.
以下の条件に合致する場合、i行目G列の購入金額セルを黄色にしています。
・i行目B列の取引先担当者が、J3セルで選択した人であること
・i行目G列の購入金額が、J7セルに入力した金額以上であること
※J3セルは、リストを作成しており、担当者を選択するだけにしています。
特定条件で色を付ける_取引先担当者リスト

11-12.
もしJ3セルやJ7セルに値が入力されていない場合は、メッセージボックスで「取引先担当者を選択&購入額を記入してください」と表示して、Exit forでループを抜けます。

「リセット」パートの解説

2-3.
最終行をi_lastrowsと定義しています。
5-7.
G2セルから、G列の最終行までのセル(購入金額欄)の色指定をクリアしています。
また、J3とJ7の入力欄もリセットしています。

感想

このマクロでは、マッチングする項目のセルを黄色にするだけでしたが、マッチングしたデータを別シートに転記したり、PDFで出力すれば、使いやすいマクロになったかな~と、ブログを書きながら思いました。もしご要望あれば、コメント頂ければ嬉しいです。