こんにちは、Ryoです。
条件に合致するデータの検索・抽出などによる複数のセルやセル範囲を扱うような場合に、その範囲をまとめて扱うことができるUnionメソッドがありますので、今回はその内容について書いていきます。
1.サンプル概要
サンプルとして準備した下の画像の表を利用します。「担当」欄の「BB」が入力された欄を抽出~まとめて選択してセルを塗りつぶします。
実行後、指定文字列の「BB」が入力されたセルをまとめて選択し色を付けています。
以上がサンプル概要になります。
2.サンプルコード
Sub Sample1() Dim i As Long Dim Target As Range '指定回数分の繰り返し処理実施 For i = 0 To 14 'セルF2から下方向へ順にセル値を判定 If Range("F2").Offset(i).Value = "BB" Then 'Unionメソッドのエラー(Nothing代入)回避処理 On Error Resume Next '変数Targetと新たに検出されたセルを 'Unionメソッドでまとめる Set Target = Union(Target, Range("F2").Offset(i)) 'エラーが発生していない(=0)に処理を実行 If Err.Number <> 0 Then '変数Targetに現在のセルを設定 Set Target = Range("F2").Offset(i) End If 'On Error Resume Nextの無効化 On Error GoTo 0 End If Next 'Unionメソッドで1つにまとめられたセルをすべて選択 'セルの塗りつぶしも合わせて実行 With Target .Select .Interior.ColorIndex = 44 End With End Sub
このようにUnionメソッドを使用すると2つ以上のセルやセル範囲をまとめて1つとして扱うことができます。
構文:Union(Arg1, Arg2, Arg3, ・・・Arg30)
サンプルではF列のデータに対し、Offsetプロパティを利用して下方向へ順にチェックしていきます。セルの値が「BB」であれば検出されたセルをUnionメソッドでまとめ、且つ現在のセル情報を変数Targetに設定します。
この処理の過程で変数TargetがNothingになっている状態でUnionメソッドに設定しようとするとエラーとなってしまうので、その回避としてOn Error Resume Next~On Error Goto 0を使用しています。
対象範囲の処理完了後、変数Targetに設定されているセル全てをSelectメソッドで選択して色付けの処理を行っています。
3.まとめ
今回のUnionメソッドは複数選択したセルの範囲をまとめて扱うことができるので、知っておくと処理が容易になるケースも多々ありますから有用だと思います。
設定する際のエラー回避としてサンプルのようにOn Error Resume Nextを利用する、またはIf文でNothingかどうかについて判定する処理を行う点のみ留意しておく必要がありますが、扱いは比較的容易なので機会があればご活用くださいませ。
以上、複数のセルを選択・まとめて処理を実行する方法についてでした!今回の記事が何かの参考になれば幸いです。
Ryo