見出し画像

適用範囲を自動で取得!一瞬で条件書式を設定する方法【Excel VBA】

『Excelの表にハイライト設定をしたいけれど、行の増減が頻繁にあっていちいち条件書式を設定するのがめんどくさい。。。』

『ハイライトするようにマクロを組んでいるけれど、毎回変化するデータの数に合わせて条件書式を設定する方法が分からない。。。』

そんなお悩みを抱えている方はいらっしゃいませんか?

そこで今回はExcel VBAを使って、設置したボタンを押すと一瞬で選択している行をハイライトさせる方法を紹介していきます。

『まだ一度もマクロを組んだことがない。。。』という方は、以下の記事で事前準備について説明しています。まずはこの記事を読んでから実施するのがおすすめです。

⚠️一通りの流れは説明していますが、前回の記事を見るにあまり需要がなさそうだったため今回は少し説明を省略しています。

⚠️例として使用しているExcelファイルは、私が丹精込めて作成した架空の会社の社員名簿です。実在の人物とは一切関係ありません。

01.セル選択時の処理

まず初めに、セルをクリックしている間だけ条件書式設定を適用させるように設定していきます。

1)キーボードの「Alt」キーと「F11」キーを同時に押して「Microsoft Visual Basic for Applications」画面を開き、強調表示設定をしたいシートに以下のコードをコピペします。

Private Sub WorkSheet_SelectionChange(ByVal Target As Range)
   Application.ScreenUpdating = True
End Sub
03_該当シートを選択してコピペ

これで、選択している行に条件書式を反映させるための設定が完了しました。

02.条件書式の編集

ここでは、条件書式設定のコードを編集していきます。

1)以下のコードをメモ帳か何かに丸ごとコピペしてください。
 行の先頭に「'」がついている行は、コメントであることを示しています。

'変数の宣言
       Dim MaxRow As Integer, MaxCol As Double
       Dim i As Integer: i = 1
       Dim StartCell As String
   
'■編集範囲①----------------------------------------------------------ここから
   '表の左上のセル番号を""の中に入力してください(例:StartCell = "B2")
        StartCell = "B2"
'--------------------------------------------------------------------ここまで■

   
   '範囲を取得する
       MaxRow = Cells(Rows.Count, 2).End(xlUp).Row
       MaxCol = Cells(2, Columns.Count).End(xlToLeft).Column
  
   '適用する範囲を設定
       Range(Range(StartCell), Cells(MaxRow, MaxCol)).Select
       
       
'■編集範囲②----------------------------------------------------------------------------------------------------ここから
   'ハイライトしたい場所を Formula1:= の右側に "" で囲んで入力してください
       Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=CELL(""ROW"")=ROW()"
'--------------------------------------------------------------------------------------------------------------ここまで■
   
    '条件書式の優先順位を1に設定
       Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
       

'■編集範囲③-------------------------------------------------------ここから
   'ハイライトの書式設定 = の右側を編集してください
   
       '太字(あり:True / なし:False)
           Selection.FormatConditions(1).Font.Bold = True
           
       '文字色(色をカラーコードから選択して入力)
           Selection.FormatConditions(1).Font.ColorIndex = 1
           
       '斜体(あり:True / なし:False)
           Selection.FormatConditions(1).Font.Italic = False
           
       'セルの塗りつぶし(色をカラーコードから選択して入力)
           Selection.FormatConditions(1).Interior.ColorIndex = 35
           
       '下線(あり:書式設定コードの⑥~⑨から選択 / なし:Null)
           Selection.FormatConditions(1).Font.Underline = Null
'-----------------------------------------------------------------ここまで■
   
   
   '条件を満たしても処理を停止しない
       Selection.FormatConditions(1).StopIfTrue = False

続いて、早速コードを編集していきます。

2)編集範囲①を編集します。この部分では、ハイライト設定をしたい1番左上のセルを「=」の右側の「""」の間に入力します。
 私の場合だとB2のセルが一番左上なので、『"B2"』と設定しています。

'■編集範囲①----------------------------------------------------------ここから
   '表の左上のセル番号を""の中に入力してください(例:StartCell = "B2")
        StartCell = "B2"
'--------------------------------------------------------------------ここまで■
T01_表の左上のセル

3)続いて編集範囲②の編集をします。ここでは、条件式を入力しています。現在『=CELL(""ROW"")=ROW()』となっているところを変更してください。

'■編集範囲②----------------------------------------------------------------------------------------------------ここから
   'ハイライトしたい場所を Formula1:= の右側に "" で囲んで入力してください
       Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=CELL(""ROW"")=ROW()"
'--------------------------------------------------------------------------------------------------------------ここまで■

このままの設定だと行だけがハイライト表示されます。列のみ、または行と列どちらもハイライト表示したい場合は、こちらの記事でコードを紹介しているのでご確認ください。

4)最後に編集範囲③を編集していきます。ここでは、どのように強調表示させたいかを設定していきます。

'■編集範囲③-------------------------------------------------------ここから
   'ハイライトの書式設定 = の右側を編集してください
   
       '太字(あり:True / なし:False)
           Selection.FormatConditions(1).Font.Bold = True
           
       '文字色(色をカラーコードから選択して入力)
           Selection.FormatConditions(1).Font.ColorIndex = 1
           
       '斜体(あり:True / なし:False)
           Selection.FormatConditions(1).Font.Italic = False
           
       'セルの塗りつぶし(色をカラーコードから選択して入力)
           Selection.FormatConditions(1).Interior.ColorIndex = 35
           
       '下線(あり:書式設定コードの⑥~⑨から選択 / なし:Null)
           Selection.FormatConditions(1).Font.Underline = Null
'-----------------------------------------------------------------ここまで■

こちらについては、コメントに沿って以下の記事を参考に変更してください。色のコードや書式設定に関するコードを見本付きで紹介しています。

すべて編集し終わったら条件書式の編集は終了です。

03.マクロの作成

ここでは、マクロを作成していきます。

1)「開発」タブを開いて、「マクロ」をクリックします。

04_マクロをクリック

2)「マクロ名」にマクロの内容が分かりやすい好きな名前を入力して「作成」をクリックします。

05_マクロに名前を付けて作成

3)「Microsoft Visual Basic for Applications」画面が開きます。1行目の『ハイライト設定』という部分には、設定したマクロの名前が表示されます。

06_マクロの画面が開く

4)『02.条件書式の編集』で編集したコードを『Sub マクロ名()』と『End Sub』の間の行にコピー&ペーストします。

T02_コピペ位置
07_コードをコピぺ

これでマクロの作成は完了です。

04.ボタンの作成

ここでは、マクロを実行するためのボタンを作成していきます。

⚠️ボタンを設置したくない方は、「Ctrl」+「F8」を同時に押して、作成したマクロを選択して「実行」を押すことでマクロを実行できます。

1)「開発」タブを開いて、「挿入」内の「ボタン(フォームコントロール)」を選択します。

08_ボタンの作成

2)シート内のどこか適当なところにドラッグしてボタンを作成します。
 移動させたりサイズを変えるなどの編集をしたい場合は、作成したボタンを右クリックすることで可能です。

09_ボタンをドラッグで作成

3)作成したボタンを右クリックして「テキストの編集」を選択します。

10_テキストの編集をクリック

4)ボタンの文字が編集できるようになるので、好きな名称に変更してください。

11_ボタンの名前を編集

5)もう一度ボタンを右クリックして「マクロの登録」を選択します。

12_マクロの登録をクリック

6)先程作成した『マクロ名』を選択して「OK」をクリックします。

13_登録するマクロを選択する

これでボタンを押すとマクロが実行されるようになりました。作成したボタンをクリックしてから表の中を選択すると、選択している行がハイライト表示されます。

14_ハイライトしている画像

ハイライトの色などが気に入らなかった方は、「Ctrl」+「F8」を同時に押して、作成したマクロを選択してから「編集」を押すことでマクロを編集することができます。

■ボタンの設置位置【注意】

ボタンの設置場所は自由に決めていただいて構わないのですが、表の横に置く場合は注意が必要です。

19_右側においてしまうと

というのも、フィルターで絞り込みを行うと以下のようにボタンが隠れてしまうことがあります。

20_フィルターかけると見えなくなる

フィルターを使用する方は、ボタンが隠れないよう、なるべく表の上に設置するのがおすすめです。

■増え続ける条件書式設定【注意】

今回、ご自身で条件書式を設定している方がいらっしゃる可能性があるため、不要になった条件書式を削除するコードを記載していません。

そのため、マクロを実行するたびに条件書式のルールが増えていきます。

気にしない方は放置していても問題ありませんが、気になる方は「ホーム」タブの「条件付き書式」内の「ルールの管理」からルールを削除することをお勧めします。

作成した条件書式の優先順位を一番に設定するようにマクロを組んでいるため、一番上のルールがボタンで作成された最新の条件書式です。

自身で設定しているルールがない方は、一番上のルール以外は「ルールの削除」で削除してしまってください。

23_ルールを削除

いちいち削除するのが面倒な方は、以下のコードを編集範囲①の下にコピペすることでマクロを実行する度に条件書式が全て削除されます。

 Range(StartCell).Select
 Cells.FormatCondtions.Delete

既存の条件書式も全て消えてしまうため、必ず条件書式を設定していないか確認してから追記してください。

こんな機能が知りたい!というコメントなどをいただけたらゆくゆく記事にしていくかもしれません☻