エクセルで管理表などを作成した際に、ダブルクリックや右クリックで”○”や”済”などの処理が行えるととても気が利いていて便利です。
VBAをコピペするだけで簡単に導入することができるのでぜひ試してみてください。
尚、今回は、シート全域に処理が反映されると邪魔くさいという考えで、範囲を指定して処理を実行できる機能としています。
(エクセルなのに文字が入力できなくなると不便ですからね。)
“○”をダブルクリックで入力するVBA
VBAコード(コピー可)
まずはダブルクリックで”○”を入力するVBAです。
以下をコピーして貼り付けてください。
(VBAは「Alt+F11」で開くことができます。)
1 2 3 4 5 6 7 8 9 10 | Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Not (Target.Row >= 6 And Target.Row <= 896 And Target.Column >= 13 And Target.Column <= 19) Then End If Target.Value <> "" Then ' Target.Value = "" Cancel = True Else Target.Value = "○" Cancel = True End If End Sub |
上記プログラムでは6行目~896行目、13列目~19列目の範囲でしか反応しないようにしています。
必要に応じてこの数値を変更して範囲を変えてみてください。
黄色マーカーの部分の数値を書きかえたらOKです。
(上から順に1行,2行,3行… 左から順に1列,2列,3列… です。)
また、通常はダブルクリック時にセルの編集になりますが、このプログラムではセルの編集をキャンセルしています。
1 | Cancel = True |
“○”を入れたいだけなのにセルの編集に移ってしまうと邪魔くさいので省いています。
応用編 セルに右クリックで”済”と入力しさらに指定のセルを色付けする
ちょっとした応用例を紹介します。
下記のような機能を追加したい場合に活用できるvbaコードです。
✓ 右クリックで”済”と入力する
✓ “済”と入力すると、連動して指定したセルに色付けする
✓ 右クリックを押下した際にメニュー表示させない
チェックした項目には網掛けしておきたいときなどに使用できるVBAと思っています。
それでは早速VBAの内容を載せます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) Dim c As Range '選択しているセル範囲の内、一個のセル Dim r As Range '現在のシート"Range"のセル範囲 Set r = ActiveSheet.Range("Range") 'Set r = Range("Z6:Z" & Range("A" & Rows.CountLarge).End(xlUp).Row - 1) 'Z列の6行目~合計の行の一個前までの範囲 For Each c In Target If c.Column = 1 Then End '選択しているセル範囲から、cにセルを一つずつ代入 If Not Intersect(c, r) Is Nothing Then 'cとrで共通しているセル範囲が存在するならば、、、 Cancel = True '右クリックメニューを表示させない。 If c.Value <> "" Then c.Value = "" Range("B" & c.Row & ":F" & c.Row).Interior.ColorIndex = 0 '無色化 Range("U" & c.Row).Formula = "=G" & c.Row & "*L" & c.Row '数式化 Range("V" & c.Row).Formula = "=H" & c.Row & "*L" & c.Row '数式化 Range("W" & c.Row).Formula = "=I" & c.Row & "*L" & c.Row '数式化 Range("X" & c.Row).Formula = "=J" & c.Row & "*L" & c.Row '数式化 Range("Y" & c.Row).Formula = "=K" & c.Row & "*L" & c.Row '数式化 Else c.Value = "済" Range("B" & c.Row & ":F" & c.Row).Interior.Color = 14277081 '灰色化 Range("U" & c.Row & ":Y" & c.Row) = Range("U" & c.Row & ":Y" & c.Row).Value '数値化 End If End If Next c End Sub |
数値化の欄は、私が使用している管理表の中で関数を使用していたため数値に変換するために含めています。
必要なければ’数値化の項を削除してご使用ください。
以上、業務効率化に役立つ管理表に使用できるVBAを紹介しました。
小さなことですが、あると便利ではないでしょうか。
コメント