Excelが大好きだ!

Excel大好き経理マンがExcelの事を書き綴っていきます。


スポンサードリンク

セルをダブルクリックしたら色を塗るようにした

紙の資料と画面のExcelの数値をチェックしたりすることはないだろうか?

残念ながらありまくりである。

今回はこの作業を少しでも楽にできないかとアドオン作ったお話

現在の作業

紙に定規を当て内容を目検し、画面上のExcelの内容をチェック。

Excelでチェックした内容にチェック済みという意味でマークを付けたりしないだろうか。
私の場合は該当項目の横のセルに「1」を入力するか、該当セルに色を付けることが多い。

色を塗るパターンの場合、以下のような動きになる
f:id:ExcelLover:20210116144807g:plain

  1. 該当項目を選択
  2. 右クリックしてメニューを表示
  3. 色塗りボタンをクリック

セルを選択した後の動作がなんともめんどくさい。
セルをクリックしたときに念を送ると色を塗ってくれると良いのだが、残念ながらそこまでのテクノロジーは備え付けらていない。

代替案として該当セルをダブルクリックすると色を塗る機能を作成することにした。

シートイベントの活用

今回のゴールはアドイン機能で上記の機能を実現することだが、まずは単体のブック上で実現する方法を紹介する。

シートイベントの挿入


まずはVBEを開く。(ショートカットキーは Alt + F11)
f:id:ExcelLover:20210116144929j:plain

セルをダブルクリックすると色を塗りたいシートを選択する。
今回は「Sheet1」を選択している。

f:id:ExcelLover:20210116145001j:plain

「ダブルクリック」イベントを作成する。 オブジェクトから「Worksheet」を選択後、イベント種類から「BeforeDoubleClick」を選択 f:id:ExcelLover:20210116145053g:plain

これでSheet1でセルをダブルクリックするとマクロを発動する準備が整いました。
作業の途中で記載されてしまったPrivate Sub Worksheet_SelectionChange~End Subは削除しても大丈夫です。

シートイベントの内容記入

次にシートをダブルクリックした時に発動させたいコードを記載します。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
     With Target.Interior
          If .ColorIndex = xlNone Then
               .Color = vbRed
          Else
               .Color = xlNone
          End If
     End With
     Cancel = True
End Sub

コードの意味としては下記のようになります。

ダブルクリックしたセルに色塗りつぶしがなければ
赤く塗る。
そうでない場合は
色塗りつぶしをクリア
ダブルクリックイベントを無かったことにする

ColorConstans(カラー定数)

セルに色を塗るにはRange.InteriorのColorプロパティを使用します。

定数
vbBlack
vbRed
vbGreen
vbYellow
vbBlue
vbMagenta
vbCyan シアン(水色)
vbWhite

docs.microsoft.com

上記以外の色を使いたい場合は色の番号を直接入力することで使用することが出来ます。
例えば私は上記には無いオレンジを使用したいので以下の方法で色番号を調べました。

f:id:ExcelLover:20210116145155g:plain

上記の様にマクロの記録を行うと下記のコードを得ることが出来ます。

Sub Macro2()
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 49407
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    Range("F40").Select
End Sub

上記コード内の「.Color = 49407」の49407がオレンジ色の色番号になります。
この番号を最初のコードのvbRedと置き換えます。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
     With Target.Interior
          If .ColorIndex = xlNone Then
               .Color = 49407
          Else
               .Color = xlNone
          End If
     End With
     Cancel = True
End Sub

Cancel = True(イベントキャンセル)

「Cancel = True」はダブルクリックしたことを無かった事にするコードです。
仮にこのコードが記載しなかった場合どうなるでしょう。

f:id:ExcelLover:20210116145239g:plain

当然ながらセルをダブルクリックすると色が塗られて上でセルが編集状態になります。

f:id:ExcelLover:20210116145509g:plain

ピボットテーブルをダブルクリックすると該当セルに色が塗られた上で。内容が展開されます。


同じことを「Cancel = True」を記載した状態で行うとこのようになります。

f:id:ExcelLover:20210116145749g:plain

f:id:ExcelLover:20210116145831g:plain

セルは編集状態にならず、ピボットテーブルは内容が展開されません。
つまり普通ダブルクリックをすると発生するはずの動作が発生しなくなります。

チェック作業を行うときはダブルクリックイベントが発生しないほうが作業が滞りなく進みますので「Cancel = True」で進めていきます。

まとめ

以上でセルをダブルクリックするだけで色を塗ることが出来るようになりました。

しかし今回の方法は作業をするブックに毎回上記のコードを記載する必要があり、手間がかかります。

この手間を省くために自作アドインメニューに上記の機能を取り込み、ボタン1つでどのブックでも実行できるようにしようと思います。