普段、エクセルの表に文字や数値を入力されている方は経験があると思いますが、
入力中のセルがどの行や列に入力しているかわからなくなる時があると思います。
1行または1列おきに色で塗りつぶして分かりやすくしているファイルもありますが
行・列数が多ければ多いほど、「今どの行を入力しているんだっけ?」という
場面が大いにあります。
そこで今回は選択しているセル・行・列を自動で色付けすることで
どこの項目や番号に入力しているか分かりやすくしてみたいと思います。
条件付き書式とマクロVBAを使用しますが
実際の画面を用いて説明しますので是非参考にしてみてください。
それでは見ていきましょう。
⬛︎こんな事ができるようになる!
選択しているセル・行・列に自動的に塗りつぶしで色がつくことで
選択中の範囲が一目でわかるようになる。
⬛︎必要な知識
・条件付き書式設定
【条件付き書式】必見!使用方法や設定方法を詳しく説明~ルールの追加・編集・削除・優先順位~ ► 独学エクセル塾 (dokugakuexcel.com)
・マクロVBA設定【マクロVBA】プログラム・ソースコードを入力するためのモジュール作成・削除・名前の変更について ► 独学エクセル塾 (dokugakuexcel.com)
⬛︎選択しているセル・行・列に色をつける
①条件付き書式の設定
まず初めに条件付き書式を設定する必要があります。
見本で下図の表を用意しました。
今回は見本で選択した行の色が変わるようにしたいと思います。
まず、表を範囲選択します。
そしてメニューの「ホーム」から「条件付き書式」を選択します。
メニューの中に「新しいルール」という項目があるのでこちらを選択します。
まずは、ルールの種類を選択するのですがここでは「数式を使用して、書式設定するセルを決定」にします。
次に「次の数式を満たす場合に値を書式設定」に数式を入れるのですが
例では選択した行に色をつけるので「=Cell(“Row”)=Row()」とします。
意味として「Cell(“Row”)」は現在選択しているセルになります。
つまり、5行目を選択していれば「Cell(“Row”)」は「5」になります。
「Row()」の部分は単純でセルの行数を指します。
つまり、7行目の書式の「Row()」は「7」のように、
そのセルの行数を出力します。
つまり「Cell(“Row”)=Row()」とする事で
選択した行に対して対象の行がイコールになれば、設定した書式になります。
次に書式の設定です。
メニューから「書式」を選択すると以下のようなメニューが表示されます。
そこから「塗りつぶし」タブを選択して色を選択します。
ちなみに今回は「塗りつぶし」ですが文字の色を変えたい場合は「フォント」のタブから
色を選択すれば可能になります。
今回は黄色にしてみました。
これで対象の表のセルを選択すると、選択した行数に合わせてその行が「黄色」になります。
では動作確認してみましょう。
「9行目」を選択して、「数式」タブから「再計算実行」をしてみたいと思います。
結果はこのようになります。
「9行目」が黄色に変わりました。
今回は行に色を付けましたが列やセル、または行と列などの条件も見本で用意しました。
列:Cell(“COL”)=Column()
行と列:OR(Cell(“Row”)=Row(),Cell(“COL”)=Column())
セル:AND(Cell(“Row”)=Row(),Cell(“COL”)=Column())
しかし、ここまで出来たものの「再計算」をしないと色が変わらないのは不便ですよね。
この現象の理由としては「条件付き書式」は再計算をしたタイミングで反映されるので、
「再計算」をさせるか、「セルをダブルクリックして編集した後にEnterで確定(計算方法の設定が自動に限る)」になります。
この問題を解決するためにマクロVBAで再計算を自動で行うプログラムを組んでいきます。
②マクロVBAで自動的に再計算を実行する
では自動的に再計算を実施する方法について説明します。
まず、visual basicの画面を開きましょう。
visual basicの画面の出し方についてはこちらから☟
【マクロVBA】プログラム・ソースコードを入力するためのモジュール作成・削除・名前の変更について ► 独学エクセル塾 (dokugakuexcel.com)
そして対象のシートを選択します。
ここでは「見本シート」になります。
こちらにコードを書き込むのですが先に書き込むコードを紹介します。
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Calculate End sub
VBAのコードを知らない方、知らなくても良いという方は
すでに機能していると思うので試してみてください。
ではコードの説明をしていきます。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
の意味は「セルの選択が変更された時に実行する」という機能を持ちます。
つまり、マウスで別のセルを選択したり、矢印キーで
セルの選択の移動をした際にプロシージャ(プログラム)が実行されます。
その下に「calculate」がありますが
これは「計算の実行」を指します。つまり、再計算をしてくれるコードです。
では先程のシートに戻りましょう。
セルをクリックまたはし矢印キーで表を動かした結果はこちらです。
セルの選択に合わせて対象行が塗りつぶされて、
現在選んでいる行がわかりやすくなりました。
⬛︎応用:セルを動かすたびに動きが遅くなる原因
今回の機能を追加して、動作が遅くなった場合は
ファイル自体に多くの関数を使っているのかもしれません。
セルの選択を変えると表以外の関数も再計算が実行されます。
つまり関数を大量に使用していれば、その都度計算を実行するので処理に時間がかかるメカニズムです。
そこで対処法として、「指定範囲内のセルの選択のみ計算を実行する」ことで、
不要な再計算をなくす事ができます。
ではコードを紹介します。
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Row >= 3 And Target.Row <= 13 And Target.Column >= 2 And Target.Column <= 7 Then Calculate End If End Sub
仕組みとして、選択したセルの情報は「target」に格納されます。
そこから選択したセルの行数と列数を検出し、対象範囲だった場合に再計算をさせるコードになっています。
見本では行数は「3から13」、列数は「2から7」で再計算を実行します。
これにより、表以外を選択しても不要な再計算をしなくてもいいので
余分なロスがなくなります。
⬛︎公式の説明
わかりやすいように説明したため公式と使用する語句が異なりますが
マイクロソフト公式の説明については下記のリンクを参照してください。☟
Worksheet.Calculate メソッド (Excel) | Microsoft Learn
Worksheet.SelectionChange イベント (Excel) | Microsoft Learn
⬛︎まとめ
いかがだったでしょうか。
今回の内容を応用すると表の入力箇所が、どの項目に打ち込んでいるのか分かりやすくなるので
とても便利になります。
VBAを触った事がない方は
少し、難しい内容ですがこれを機にVBAを学ぶのも良いかもしれません。
それでは次回の記事でお会いしましょう。