実務でExcelをお使いの方からは、様々な質問・要望をいただきます。
「セルをダブルクリックしたら色を変えられるようにするにはどうしたらいいのでしょうか?」
といったご質問をいただくことがあります。
2003までのExcelなら、[書式設定]ツールバー−[塗りつぶしの色]ボタンや、[セルの書式設定]ダイアログ−[パターン]タブでセルの色を指定できます。
Excel 2007なら、[ホーム]タブ−[フォント]グループ−[塗りつぶしの色]ボタンや、[セルの書式設定]ダイアログ−[塗りつぶし]タブなどでセルの色を指定できます。
実務ではセルの色を変更する処理が頻発するようなことがあり、そんなときに[塗りつぶしの色]ボタンの操作でさえ面倒に感じることもあり、
「ダブルクリックで色を変えるには?」
といった要望をいただくことになるわけです。
※B1:B10セルでダブルクリックしたときに、塗りつぶしが設定されていなければ明るい緑色で塗りつぶし、塗りつぶしが行われているときは塗りつぶしを解除する例
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Intersect(Target, Range("B1:B10")) Is Nothing Then Exit Sub
With Selection.Interior
If .ColorIndex = xlNone Then
.ColorIndex = 4
Else
.ColorIndex = xlNone
End If
End With
Cancel = True
End Sub▼サンプルファイル(003086.xls 37KByte)ダウンロード
サンプルファイルでは「Sheet1」シートのWorksheet_BeforeDoubleClickイベントプロシージャを、上記のようにコーディングしてあります。
「Sheet1」シートのB1:B10セルをダブルクリックすると、セルの色が変化することをご確認いただけるでしょう。
セルの背景色を変更しているのは、
With Selection.Interior
If .ColorIndex = xlNone Then
.ColorIndex = 4
Else
.ColorIndex = xlNone
End If
End With
の部分です。
「.ColorIndex = xlNone」のとき、即ち背景色が設定されていないときに「.ColorIndex = 4」としています。「4」が明るい緑色なのですが、他の色にしたいときは他の数値を指定してください。
色と数値の関係については、ColorIndexプロパティ値一覧をご参照ください。
B1:B10セルに対してだけ処理したいので、
If Intersect(Target, Range("B1:B10")) Is Nothing Then Exit Sub
というIf文を、背景色の変更処理の前に入れています。
他のセル範囲に対して、ダブルクリックで色変更するのであれば、「Range("B1:B10")」の部分を変更してください。
Excelでは通常ダブルクリックをすると、セル内にカーソルが入ってしまいますが、色をつけるためにダブルクリックしているのに、いちいちセル内にカーソルが入ると鬱陶しくて仕方ないはずなので、「Cancel = True」でDoubleClickイベントをキャンセルしています。
- Newer:不表示?非表示?
- Older:段組みの列幅を変更するには?−段組みダイアログ
Home » エクセルマクロ・Excel VBAの使い方 » イベントプロシージャ » ダブルクリックでセルの色を変更−Worksheet_BeforeDoubleClick