セルに色を塗る時パレットから色を選んだら左クリックだけで色を塗りたい
お絵かきアプリのように
CheckBox1にチェックを入れて色塗り開始
右クリックで色を選んで左クリックで色を塗る
ブック名とシート名を確認
今回はブック名がBook2でシート名がSheet1なので
VBAProject(Book2)の中にあるSheet1(Sheet1)を右クリックして
メニューからコードの表示を選択
以下をコピペ
Dim x, y As Long
Dim myColor As Long
Dim isBlank As Boolean
Dim oldBlank As Boolean
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
If CheckBox1.Value = False Or x = 0 Then Exit Sub
If oldBlank Then
Image1.BackColor = RGB(255, 255, 255)
Target.Interior.Pattern = xlNone
Else
Image1.BackColor = myColor
Target.Interior.Color = Image1.BackColor
End If
If Target.Interior.Pattern = xlNone Then
isBlank = True
Else
isBlank = False
End If
Cancel = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If CheckBox1.Value = False Then Exit Sub
Dim myCells As Range
x = Target.Row
y = Target.Column
If Cells(x, y).Interior.Pattern = xlNone Then
oldBlank = True
Else
oldBlank = False
myColor = Cells(x, y).Interior.Color
End If
For Each myCells In Target
If isBlank Then
myCells.Interior.Pattern = xlNone
Else
myCells.Interior.Color = Image1.BackColor
End If
Next
End Sub
コピペしたところ
これで完成
チェックを入れる前に色の付いていないセルを選択しておく
右クリックするとImage1に今の色が表示される
クリックしたセルに今の色が塗られる
キーボードの矢印キーでも塗れる
色を消したい時は
色のないセルを右クリックしてから
色を消したいセルを左クリック
仕様1
塗られる色はRGBで指定して塗っているので
ブックのテーマを変更しても色は変化しない
仕様2
もう一つが色を塗った後に同じセルを右クリックすると色が変わってしまう
普通に使っていれば行わない操作だ
し致命的ではないから多少はね?
ダウンロード
ファイル名
エクセルでドット絵、右クリックで色取得、左クリックで色塗りマクロ.xlsm
この機能をアドインの午後のパレットに取り込めたらいいんだけど
どうすればいいのか皆目見当がつかない
ワークシートモジュールじゃなくても
Worksheet_SelectionChangeのような動作ってできるのかなあ
ユーザーフォームのパレットから選んだ色を左クリックしたセルに塗る動作
こう書くと簡単そうなんだよなあ
→できた
塗りつぶしなしの処理を省くと、こんなに短くなる
Dim x, y As Long
Dim myColor As Long
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
If CheckBox1.Value = False Then Exit Sub
Image1.BackColor = myColor
Target.Interior.Color = Image1.BackColor
Cancel = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If CheckBox1.Value = False Then Exit Sub
Dim myCells As Range
x = Target.Row
y = Target.Column
myColor = Cells(x, y).Interior.Color
For Each myCells In Target
myCells.Interior.Color = Image1.BackColor
Next
End Sub
最初はこうだったけどやっぱり塗りつぶしなしもあったほうが便利だと思って
書いていたら2倍以上になってしまった
関連リンク