【エクセル】アクティブセルや行列を自動で色付け:条件付き書式とVBA

時計 2024.05.01 / 時計

【エクセル】アクティブセルや行列を自動で色付け:条件付き書式とVBA

記事ではMicrosoftのエクセルにおける、アクティブセルやアクティブセルの行列自動色付けする方法について詳しく解説していきます。

大量のデータを含む表を扱う場合、現在のセルがタイトル行列のどこに位置しているのかわかりづらいです。

アクティブセルやその行列を色付けすることでタイトル行列(見出し)を見失わずに入力でき、データ誤入力の減少やユーザーの利便性向上が見込めます。

本記事を通して、エクセルのアクティブセルや行列を自動で色付けする方法について理解を深めてください。

ここではMicrosoft 365による最新のエクセルを使用しています。

Microsoft用語の確認

Microsoft 365とはMicrosoft社が提供しているOfficeアプリケーション(Outlook、Word、Excel、SharePoint、PowerPointなど)やサービスを利用できるサブスクリプション(月額課金制)のクラウドサービスです

アクティブセルや行列を自動で色付けとは

私は社内SE(システムエンジニア)として働いており、様々なエクセルに関する問い合わせに日々対応しています。

数多くあるエクセルの問い合わせの中で、次のような問い合わせを受けることがあります。

エクセルに関する問い合わせ

エクセルで選択しているセルが表のどのタイトル行(列)かわかりづらいので、アクティブセルの行列が自動で色付けされるようにしたい

ビジネスでは大量のデータが入力されている表を扱うことは頻繁にあります。特に大きなデータセットを扱う場合、現在のアクティブセルがどのタイトル行列に位置しているかわかりづらいです。

この問題を解決するためにアクティブセルの行列を自動で色付けすることは非常に有効的です。アクティブセルの行列を色付けすると次図のようにアクティブセルのタイトル行列がわかりやすくなります。

Excel:行列を色付け

アクティブセルの行や列に色付けすることは次のような利点があります。

アクティブセルの行列を色付けする利点
  • アクティブセルのタイトル(見出し)を見失わずに追跡できる
  • 誤って間違った行や列へのデータ誤入力が減少する
  • ユーザーの利便性が向上する

このような利点があることから、複雑な大量のデータを扱う際はアクティブセルの行列を自動で色付けすることが有効的となります。

エクセル:セルや行列の自動色付けの事前準備

エクセルのアクティブセルや行列の自動色付けする事前準備として、以下2点を行っておいてください。

  • エクセルを「Excelマクロ有効ブック(.xlsm)」で保存する
  • 開発タブを表示させる

エクセルを「Excelマクロ有効ブック(.xlsm)」で保存する

本記事で紹介する方法ではVBAを利用してマクロを組みます。VBAとはVisual Basic for Applicationの略称であり、Microsoftが開発したオフィス製品用のプログラミング言語です。VBAを使うことで複雑なマクロを組むことができます。

IT用語の確認

マクロとはコンピューターやアプリケーションの操作を自動化する機能です。日々行う作業をマクロにして自動化することで、大幅に作業時間を短縮できます。

そのため利用するエクセルはマクロが登録できる「Excelマクロ有効ブック」である必要があります。拡張子は「.xlsm」となります。

もしアクティブセルや行列の自動色付けを追加したいエクセルブックがマクロ有効ブックでない場合、以下の操作でファイル形式を変換してください。

  1. 変換したいエクセルブックを開く
  2. 画面左上の「ファイル」タブをクリックする
  3. エクセル:ファイルタブをクリック
  4. 左側にあるメニューから「名前を付けて保存」をクリックする
  5. エクセル:左側に位置するメニューバーから「名前を付けて保存」をクリック
  6. 画面右側からファイルの種類を「Excelマクロ有効ブック(*.xlsm)」を選択して「保存」をクリックする
  7. Excel:画面右側からファイルの種類を「Excelマクロ有効ブック(*.xlsm)」を選択して「保存」をクリック

上記の操作で新たに拡張子が「.xlsm」に変換されたエクセルが作成されます。今後はこの新たに作成した「マクロ有効ブック」を利用していきます。

拡張子xlsをまだ利用している場合

未だにビジネスの現場で拡張子xlsの古いエクセルを利用している人を見かけます。みなさんご存じのようにxlsは10年以上前のエクセルの標準拡張子です。

今ではxlsxがエクセルの標準拡張子(マクロ付きはxlsm)となっています。

拡張子xlsはマクロの有り無しが拡張子から判別できないため、攻撃者からの悪意ある攻撃メールに利用されています。またxlsのエクセルを添付したメールは悪意のあるメールと判断され、相手に届く前にブロックされることもあります。

このような理由からビジネスで拡張子xlsを利用することはよくないです。必ず「xlsx」または「xlsm」の拡張子に変換して利用するようにしましょう。

より詳しくは以下記事をご参照ください。

開発タブを表示させる

VBAはエクセルの開発タブから起動します。しかしエクセルのデフォルト設定では「開発」タブは非表示となっています。

以下の操作を行って開発タブを表示してください。

  1. エクセルを開き、画面左上の「ファイル」をクリックする
  2. Excel:エクセルファイルを開き、左上の「ファイル」をクリック
  3. 左ペインから「オプション」を選択する
  4. Excel:左側から「オプション」を選択
  5. 表示したExcelのオプション画面の左ペインから「リボンのユーザー設定」をクリック<右ペインからメインタブ内にある「開発」にチェック<「OK」を選択する
  6. エクセル:開発タブを表示する

上記の操作でエクセルのタブに「開発」が追加されます。

エクセル:開発タブが追加される

VBAを起動させるときは開発タブのリボンから「Visual Basic」をクリックしてください。

excel:Visual BasicをクリックしてVBAを起動

アクティブセルや行列を自動で色付けする方法

アクティブセルやその行列を自動で色付けする方法として以下2パターンをご紹介します。

アクティブセルや行列を自動で色付けする方法
  • 条件付き書式とVBAを利用
  • VBAのみを利用

それぞれの方法について次項より詳しく解説していきます。

条件付き書式とVBAを利用した自動色付け方法

本記事では条件付き書式とVBAを利用した自動色付け方法を解説していきます。

エクセルでの条件付き書式とは設定した条件に基づいてセルのフォーマットを自動的に変更する機能です。この機能を使ってアクティブセルやその行列に色付けする条件を作成して表に適用させます。

ここでは条件付き書式で以下3つのパターンに対応する条件の作成方法をご紹介します。

  • アクティブセルのみ色付けする
  • アクティブセルの行のみまたは列のみに色付けする
  • アクティブセルの行と列を色付けする

上記どのパターンを行うにしても、VBAで同様のマクロを作成します。まずは開発タブのリボン内にある「Visual Basic」ボタンを押してVBAを起動してください。

Excel:Visual Basicを押す

表示されたウィンドウの左側のメニューから現在のシート名(ここではSheet1)をダブルクリックします。

Excel:VBAでシート名をダブルクリック

次に画面右側に以下コードを記述します。

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

Application.ScreenUpdating = True

End Sub
Excel:VBAにコード入力

上記のコードはシート上のセル選択が変更されても、エクセルの画面更新することを保証することを意味しています。これによりアクティブセルを変更する度に条件付き書式の条件が実行されるようになります。

つまりアクティブセルを変更する度に条件に合ったセルや行列が色付けされるということです。

次に各パターンごとの条件付き書式の設定方法について解説していきます。

アクティブセルのみ色付けする

アクティブセルのみを色付けする条件付き書式の設定方法は以下の通りです。

  1. 色付けが有効となる範囲を選択する。(表であればショートカットキー「Ctrl + Shift + *」でアクティブセルが属する連続するデータ範囲を選択します)
  2. Excel:色付けが有効となる範囲を選択
  3. ホームタブのリボン内にある「条件付き書式」をクリックし、表示されたメニューから「新しいルール」を選択する
  4. Excel:ホームタブのリボン内にある「条件付き書式」をクリックし、表示されたメニューから「新しいルール」を選択
  5. 表示された画面から「数式を使用して、書式設定するセルを決定」を選択する
  6. Excel:表示された画面から「数式を使用して、書式設定するセルを決定」を選択
  7. 「次の数式を満たす場合に値を書式設定」の欄に
    =AND(CELL("ROW")=ROW(),CELL("COL")=COLUMN())
    を入力して「書式」をクリックする
  8. Excel:アクティブセルのみ色付けするコード
  9. 表示された画面から「塗りつぶし」タブを選択<背景色から色を選択<「OK」をクリックする
  10. Excel:表示された画面から「塗りつぶし」タブを選択<背景色から色を選択<「OK」をクリック
  11. 書式ルールの編集画面に戻るので「OK」をクリックする

上記の操作により、アクティブセルのみが自動で色づくようになります。

Excel:アクティブセルのみ自動で色づける

アクティブセルの行のみまたは列のみに色付けする

アクティブセルの行のみを色付けする場合、「次の数式を満たす場合に値を書式設定」の欄に以下の数式を入力します。

=CELL("ROW")=ROW()

アクティブセルの行を色付けする書式設定

これによりアクティブセルの行が次図のように自動で色付けされます。

表のアクティブセルの行が色づく

列のみに色付けする場合は以下の数式となります。

=CELL("COL")=COLUMN()

アクティブセルの行と列を色付けする

アクティブセルの行と列を色付けする場合、「次の数式を満たす場合に値を書式設定」の欄に以下の数式を入力します。

=OR(CELL("ROW")=ROW(), CELL("COL")=COLUMN())

書式設定でアクティブセルの行と列を色付けするコード

これによりアクティブセルの行と列は次図のように自動で色付けされます。

書式設定でアクティブセルの行と列を色付け

VBAのみで自動色付けする方法

VBAのみで自動色付けすることもできます。ここでは以下3つのパターンに対応するVBAのコードをご紹介します。

  • アクティブセルのみ色付けする
  • アクティブセルの行のみ色付けする
  • アクティブセルの行と列を色付けする

アクティブセルのみ色付けする

アクティブセルのみ色付けするコードは以下の通りです。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    ' 色を変えたセルを元の色に戻す
    Cells.Interior.ColorIndex = xlNone

    ' アクティブセルを色付け
    Target.Interior.Color = RGB(255, 255, 0)  ' 黄色
End Sub
VBA:アクティブセルのみ色付け

アクティブセルの行のみ色付けする

アクティブセルの行のみを色付けするコードは以下の通りです。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    ' 色を変えた行を元の色に戻す
    Cells.Interior.ColorIndex = xlNone

    ' アクティブセルの行を色付け
    Target.EntireRow.Interior.Color = RGB(255, 255, 0)  ' 黄色
End Sub
VBA:アクティブセルの行のみ色づけする

上記コードでは表を超えて行の色付けを行います。表のみに色付けしたい場合は以下のコードを利用してください。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Cells.Interior.ColorIndex = 0
    If IsEmpty(Target) Or Target.Cells.Count > 1 Then Exit Sub
    Application.ScreenUpdating = False
    With ActiveCell
        Range(Cells(.Row, .CurrentRegion.Column), Cells(.Row, .CurrentRegion.Columns.Count + .CurrentRegion.Column - 1)).Interior.ColorIndex = 8
    End With
    Application.ScreenUpdating = True
End Sub

アクティブセルの行と列を色付けする

アクティブセルの行と列を色付けするコードは以下の通りです。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    ' 色を変えた行列を元の色に戻す
    Cells.Interior.ColorIndex = xlNone

    ' アクティブセルの行と列を色付け
    Target.EntireRow.Interior.Color = RGB(255, 255, 0)  ' 行を黄色に設定
    Target.EntireColumn.Interior.Color = RGB(255, 255, 0) ' 列を黄色に設定
End Sub
VBA:アクティブセルの行と列を色付けする

上記のコードでは表を超えて行列に色付けを行います。表のみに色付けをしたい場合は以下コードを使用してください。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Cells.Interior.ColorIndex = 0
    If IsEmpty(Target) Or Target.Cells.Count > 1 Then Exit Sub
    Application.ScreenUpdating = False
    With ActiveCell
        Range(Cells(.Row, .CurrentRegion.Column), Cells(.Row, .CurrentRegion.Columns.Count + .CurrentRegion.Column - 1)).Interior.ColorIndex = 8
        Range(Cells(.CurrentRegion.Row, .Column), Cells(.CurrentRegion.Rows.Count + .CurrentRegion.Row - 1, .Column)).Interior.ColorIndex = 8
    End With
    Application.ScreenUpdating = True
End Sub
VBA:アクティブセルの行列を表のみで色付けする

まとめ

本記事「【エクセル】アクティブセルや行列を自動で色付け:条件付き書式とVBA」はいかがでしたか。

データ数が膨大な表でとても役立つ設定です。ぜひ実際に使ってみてください。

エクセルには様々な仕事に便利な機能が備わっています。以下エクセルのまとめ記事では仕事に便利な機能を紹介しています。ぜひご覧いただき、ご自身の仕事に役立つ機能を見つけてください。