2024年2月9日【ID:0】
メンバー限定
【ExcelVBA】選択した行を自動で色付け
以下のように指定した範囲(セルB2~F13)に関して、選択している行全体を色付けする方法について解説していきます。
こちらで作成したファイルは、記事の最後にて配布しています。
このような仕組みを実現するには、条件付き書式を活用します。
条件付き書式とは、指定した条件を満たしている時に、指定したセルの書式を変更するという機能になります。
色を設定する条件を考えると以下のようになります。
・現在選択している行番号と、対象の行番号が一致する場合
少しイメージが難しいかもですが、例えば、セルB2に以下のような式が設定されているとします。
=現在選択している行番号=ROW(B2)
// 「現在選択している行番号」は、実際には別の数式が入ります。
ROW関数では、引数に指定したセルの行番号を取得することができます。
そのため、2行目のセルのいずれかが選択されている時に、この条件を満たすことになります。
この条件を満たしている時に、対象のセルの背景色を変える必要があるため、この条件の数式を条件付き書式に設定する必要があります。
「現在選択している行番号」を取得するには、CELL関数を活用します。
CELL関数の引数に以下のように指定することで、現在選択しているセルの行番号を取得することができます。
=CELL("row")
複数のセルが選択されている場合は、アクティブになっているセルの行番号が取得されます。
先ほどの条件を表す数式にCELL関数を用いると、以下のようになります。
=CELL("row")=ROW(B2)
この数式を、条件付き書式にて設定していきます。
対象の範囲を選択し、[ホーム]タブの中の[条件付き書式]の[新しいルール]を選択します。
条件付き書式の設定画面にて、[数式を使用して、…]を選択し、先ほどの数式を入力し、書式を設定します。
=CELL("row")=ROW(B2)
// 「B2」はアクティブセルのアドレスにする
このように設定することで、対象の範囲内に関して、選択している行全体を色付けすることができます。
ただ、条件付き書式の設定のみですと、色付けを反映するには、セルを編集するか数式を更新する必要があります。
その理由は、CELL関数で取得される値は、数式が更新されたタイミングに、値が更新されるためです。
そのため、対象の範囲が選択された場合は、自動で数式を更新する仕組みを実現する必要があります。
セルの選択と同時に数式を更新する仕組みを実現するには、シートモジュールを活用します。
[開発]タブの中の[Visual Basic]を選択し、表示された画面(VBE)から対象のシートモジュールを開きます。
※VBEに[プロジェクト]が表示されていない場合は、VBEの[表示]タブより表示することができます。
「Option Explicit」は設定によっては表示されませんが、表示がなくても問題ありません。
次に、[General]と表示されているリストから、[Worksheet]を選択します。
[Worksheet]を選択することで、Worksheet_SelectionChangeというプロシージャが表示されます。
万が一、別のプロシージャが表示された場合は、右隣りのリストから[SelectionChange]を選択します。
このプロシージャは、該当するシートのセルが選択されたタイミングに自動で実行されます。
そのため、以下のように「数式を更新する」という内容を記述するだけで、セルの選択と同時に数式を更新させることができます。
ただ、この状態ですと、常に数式が更新されることになるため、Excelファイル自体の処理が重くなる原因に繋がります。
そのため、該当する範囲を選択した場合に関してのみ、数式が更新されるように記述する必要があります。
そのためには、以下のように記述します。
続きはIT予備メンバー限定です。
メンバー限定コンテンツになります。
IT予備メンバーページと連携することで内容を確認することができます。
メンバーとは
すでにメンバーの方は、
ログインして連携してから、こちらを更新すると閲覧できます。
※連携しても確認ができない場合は、少し時間を置いてご確認ください。
ログイン(新しいタブ)
※[ログイン]→[設定]→[IT予備-連携]で連携できます